DataGridView使用之DataGridViewComboBoxColumn
private void init()
{
DataTable dt =getTest();
int index = -1;
for (int i = 0; i < this.dtgResult.Columns.Count; i++)
{
if (this.dtgResult.Columns[i].DataPropertyName == "ZHUANG_TAI")
{
index = i;
break;
}
}
((DataGridViewComboBoxColumn)this.dtgResult.Columns[index]).DataSource = dt;
((DataGridViewComboBoxColumn)this.dtgResult.Columns[index]).DisplayMember = "dispValue";
((DataGridViewComboBoxColumn)this.dtgResult.Columns[index]).ValueMember = "memValue";
}
private DataTable getTest()
{
DataTable dt = new DataTable();
dt.Columns.Add("dispValue");
dt.Columns.Add("memValue");
DataRow oRow = null;
oRow = dt.NewRow();
oRow["dispValue"] = "正常";
oRow["memValue"] = "0";
dt.Rows.Add(oRow);
oRow = dt.NewRow();
oRow["dispValue"] = "停用";
oRow["memValue"] = "1";
dt.Rows.Add(oRow);
oRow = dt.NewRow();
oRow["dispValue"] = "废弃";
oRow["memValue"] = "2";
dt.Rows.Add(oRow);
}
需要说明的地方:
1、 dtgResult是DataGridView控件,在设计阶段已经绑定好了数据源
2、 “ZHUANG_TAI”列在设计时指定为DataGridViewComboBoxColumn类型
3、 “ZHUANG_TAI”是DataGridView数据源里的字段,在指定列的DataSource、DisplayMember、ValueMember属性时必须使用索引,而不能通过this.dtgResult.Columns[“ZHUANG_TAI”]这种方法赋值,否则会“未将对象引用设置到对象的实例”的错误,怀疑是个BUG
4、 dao.getTest():就取得值的函数,如果是从数据库取值,是保证:字段“ZHUANG_TAI”的类型和“MEMVALUE”的类型一致,或是通过类似如下的代码获取:
public DataTable getTest()
{
DataTable dataDic = new DataTable();
dataDic.Columns.Add("DISPVALUE");
dataDic.Columns.Add("MEMVALUE");
this.oracleSelectCommand.CommandText = "Select DISPVALUE,MEMVALUE from DISPCOM";
this.Fill(dataDic);
return dataDic;
}
否则会出现表中值无法绑定上情况