DataGridViewComboBoxColumn 数据绑定

实时添加datagridview每行combobox下拉框内容 (2010-04-26 19:41:27)转载
标签: 杂谈 分类: 学习笔记
步骤:
1.在dGViewModify添加一列colPState,类型是DataGridViewComboBoxColumn
2.在dGViewModify的属性Columns里选择添加的这一列,将DisplayStyle属性改为comboBox(很鸡肋,我去掉了)
3.在需要添加的地方这样写:
DataGridViewComboBoxCell combox = dGViewModify.Rows[i].Cells["colPState"] as DataGridViewComboBoxCell;
combox.Items.Clear();
combox.Items.Add("boy");
combox.Items.Add("girl");
4.一般情况下,datagridview只能绑定一个数据源,所以每一行combobox的内容不能随意添加,我们更改了它的这一属性,将弹出这样的对话框:
DataGridViewComboBoxCell value is not valid.
解决方法很简单:在datagridview的事件中添加dataError(),函数体可以为空。



----------------------------------------------
:完整解决办法如下:
数据绑定并不代表已经对单元格进行赋值,其实只是对DataGridViewComboBoxColumn.Items进行填充而已,而DataGridViewComboBoxCell.Value 此时并没有值(它不同于DataGridViewTextBoxCell ),所以,不管怎样,都须要对此单元格进行人为赋值。

在绑定数据之后,调用如下代码即可:
///


/// 设置单元格值
///

/// 列索引
private void SetCellValue(int columnIndex)
{
int i = 0; //行索引
int j = 0; //根据行索引得到combex的子项item索引
int count = dataGridView1.Rows.Count;

DataGridViewRow dgr = null;
DataGridViewComboBoxCell dgc = null;
try
{
for(i=0;i{
dgr = dataGridView1.Rows[i];
dgc = (DataGridViewComboBoxCell)dgr.Cells[columnIndex];

switch (i) //根据实际需要,由行得出items子项索引
{
case 0:
j = 1;
break;
case 1:
j = 0;
break;
。。。。。
default:
break;
}
dgc.Value = dgc.Items[j];//对单元格进行赋值
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}


【james_hunter】:
因为这些Combobox都是动态创建的,所以可以在创建的时候指定,即GridView的ContentCreat事件里边去,判断当前是不是创建的Combobox,如果是,则强制转换一下,并且指定默认item.


--------------------------

-------------------------
C# DataGridViewComboBoxColumn 数据绑定 (2010-04-25 22:15:56)转载
标签: 杂谈 分类: 学习笔记
dataGridView1.Columns.Clear();
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = dt;

DataGridViewComboBoxColumn comUserName= new DataGridViewComboBoxColumn();
comUserName.DataPropertyName = "userName";//**设置数据源属性的名称
comUserName.HeaderText = "用户名";//列头显示的汉字
comUserName.DisplayStyle = https://www.360docs.net/doc/4c18074884.html,boBox;
comUserName.DataSource = dtAll;//下拉框绑定的数据源
comUserName.DisplayMember = "userName_chinese";//下拉框显示内容
comUserName.ValueMember = "userName";//要和上面**处的一样
dgView.Columns.Add(comUserName);

相关文档
最新文档