首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

datagridview增加的列顺序改变导致查询出错有关问题,请达人指教

2013-04-09 
datagridview增加的列顺序改变导致查询出错问题,请达人指教数据库查询后数据绑定到datagridview上,然后在

datagridview增加的列顺序改变导致查询出错问题,请达人指教
数据库查询后数据绑定到datagridview上,然后在最后增加一列DataGridViewCheckBoxColumn,通过设置DisplayIndex=0显示到第一列,第一次执行查询正常显示,第二次就报错:指定的参数已超出有效值的范围。
参数名: columnIndex,去掉设置DisplayIndex=0则一切正常。网上查不多相关问题,特来指教

 public void searchData()
{
            Cursor currentCursor = Cursor.Current;
            Cursor.Current = Cursors.WaitCursor;
            string t1 = "";
            string db = this.comboBoxEx3.Text.ToString().Trim();
            string fl = this.comboBoxEx1.Text.ToString().Trim();
            if (fl != "")
            {
                t1 = " and " + db + ".dbo.CustomerClass.cCCName='" + fl + "'";
            }

            this.dgv_CS.Columns.Clear();
            
            isGetData("select " + db + ".dbo.Customer.cCuscode as 客户编码," + db + ".dbo.Customer.cCusName as 客户名称," + db + ".dbo.CustomerClass.cCCName as 客户分类 from " + db + ".dbo.Customer"
            + " left join " + db + ".dbo.CustomerClass on  " + db + ".dbo.Customer.cCCCode=" + db + ".dbo.CustomerClass.cCCCode where 1=1" + t1 + " order by dbo.Customer.cCuscode DESC");

            
            //将当前光标更改回原来的状态
            Cursor.Current = currentCursor;
}
private void isGetData(string sql)
{
            DataTable dt = new DataTable();
            dt = GetData(sql);

            bindingSource1.DataSource = dt;
            dgv_CS.DataSource = bindingSource1;

            //dgv_CS.AutoResizeColumns(
                  //DataGridViewAutoSizeColumnsMode.AllCells);
    

            DataGridViewCheckBoxColumn dgvCheckColumn = new DataGridViewCheckBoxColumn();
            dgv_CS.Columns.Insert(3, dgvCheckColumn);
            dgv_CS.Columns[3].Name = "选择";


            dgv_CS.Columns[3].HeaderText = "选择";

            dgv_CS.Columns["选择"].DisplayIndex = 0;
            dgv_CS.Columns["客户编码"].DisplayIndex = 1;
            dgv_CS.Columns["客户名称"].DisplayIndex = 2;
            dgv_CS.Columns["客户分类"].DisplayIndex = 3;

            //列宽自适应
            dgv_CS.Columns["选择"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgv_CS.Columns["客户编码"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgv_CS.Columns["客户名称"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgv_CS.Columns["客户分类"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            //列不可修改
            dgv_CS.Columns["客户编码"].ReadOnly = true;
            dgv_CS.Columns["客户名称"].ReadOnly = true;
            dgv_CS.Columns["客户分类"].ReadOnly = true;
  
} .net winform C#
[解决办法]
那你为什么不直接就在第一列的位置insert选择列呢?
dgv_CS.Columns.Insert(0, dgvCheckColumn);
            dgv_CS.Columns[0].Name = "选择";
            dgv_CS.Columns[0].HeaderText = "选择";
这样就没必要设置选择列的displayindex了

热点排行