C# 给DataGridViewComboBoxCell下拉列表添加项,会在绑定后清空? 10
我有一列DataGridViewComboBoxColumn但是每个cell的下拉列表内容不同,于是循环for(inti=0,i<max,i++){dgv.Rows.Ad...
我有一列DataGridViewComboBoxColumn但是每个cell的下拉列表内容不同,于是循环
for(int i = 0, i < max, i++)
{
dgv.Rows.Add(new DataGridViewRow());
DataGridViewComboBoxCell cell = dgv.Rows[i].Cells[1] as DataGridViewComboBoxCell; //第二列
//comboCol.Items.AddRange(list[i].toArray()); //comboCol 第二列名
cell.Items.AddRange(list[i].toArray());
}
然后给DataGridView绑定数据源
dgv.DataSource = new BindingList<object>(objList);
dgv.Columns[0].DataPropertyName = "col1";
dgv.Columns[1].DataPropertyName = "col2";
在绑定这三行代码的前后分别检查第二列某行cell的Items.Count发现绑定前有长度,但是绑定后长度为0,也就是给这些cell添加的下拉项都清空了!绑定后再次添加项也没用,还是会清空。另外在循环里如果用注释掉的那行代码,也就是给整列添加项,那就没有问题,但是就不能满足我每个cell下拉内容不同这个需求。
实在没有头绪,不知道怎么回事,求助! 展开
for(int i = 0, i < max, i++)
{
dgv.Rows.Add(new DataGridViewRow());
DataGridViewComboBoxCell cell = dgv.Rows[i].Cells[1] as DataGridViewComboBoxCell; //第二列
//comboCol.Items.AddRange(list[i].toArray()); //comboCol 第二列名
cell.Items.AddRange(list[i].toArray());
}
然后给DataGridView绑定数据源
dgv.DataSource = new BindingList<object>(objList);
dgv.Columns[0].DataPropertyName = "col1";
dgv.Columns[1].DataPropertyName = "col2";
在绑定这三行代码的前后分别检查第二列某行cell的Items.Count发现绑定前有长度,但是绑定后长度为0,也就是给这些cell添加的下拉项都清空了!绑定后再次添加项也没用,还是会清空。另外在循环里如果用注释掉的那行代码,也就是给整列添加项,那就没有问题,但是就不能满足我每个cell下拉内容不同这个需求。
实在没有头绪,不知道怎么回事,求助! 展开
展开全部
下面的方法实测可行。
private void SetCellComboBoxItems(int rowIndex, int colIndex, string[] itemsToAdd)
{
DataGridViewComboBoxCell dgvcbc = (DataGridViewComboBoxCell)dataGridView1.Rows[rowIndex].Cells[colIndex];
dgvcbc.Items.Clear();
foreach (string itemToAdd in itemsToAdd)
{
dgvcbc.Items.Add(itemToAdd);
}
}
private void button2_Click(object sender, EventArgs e)
{
//下面只是测试数据,每行项目增加1,
//我的第一列是DataGridViewComboBoxCell
string[] os;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
os = new string[i + 1];
for (int j = 0; j <= i; j++)
os[j] = j.ToString();
SetCellComboBoxItems(i, 0, os);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询