读书人

datagridview增加的列顺序改变导致查询

发布时间: 2013-04-09 16:45:09 作者: rapoo

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了

读书人网 >C#

热点推荐