如何在每个单元格中设置具有不同DataSource的DataGridView ComboBoxColumn?

时间:2009-07-07 00:51:55

标签: c# .net datagridview

我正在设置这样的DataGridViewComboBoxColumn

var newColumn = new DataGridViewComboBoxColumn() {
    Name = "abc"
};
newColumn.DataSource = new string[] { "a", "b", "c" }; 
dgv.Columns.Add(newColumn);

这样做:每行在该列中都有一个下拉框,填充了a,b,c。

但是,现在我想修剪某些行的列表。我试图像这样设置每行列表:

foreach (DataGridViewRow row in dgv.Rows) {
    var cell = (DataGridViewComboBoxCell)(row.Cells["abc"]);        
    cell.DataSource = new string[] { "a", "c" };                        
}

但是,此代码无效 - 每行仍显示“a”,“b”,“c”。

我尝试将new string[]替换为new List<string>new BindingList<string>,两者均无济于事。

我也尝试删除设置newColumn.DataSource的代码,但列表为空。

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:21)

以下适用于我:

DataGridViewComboBoxColumn newColumn = new DataGridViewComboBoxColumn();
newColumn.Name = "abc";
newColumn.DataSource = new string[] { "a", "b", "c" };
dataGridView1.Columns.Add(newColumn);

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)(row.Cells["abc"]);
    cell.DataSource = new string[] { "a", "c" };
}

您也可以尝试(这对我也有用):

for (int row = 0; row < dataGridView1.Rows.Count; row++)
{
   DataGridViewComboBoxCell cell = 
       (DataGridViewComboBoxCell)(dataGridView1.Rows[row].Cells["abc"]);
   cell.DataSource = new string[] { "f", "g" };
}

答案 1 :(得分:0)

另一种选择是在行级别尝试数据绑定。尝试使用事件OnRowDataBound事件。然后,您可以根据该行的内容以编程方式设置组合框中的内容。

当然,这假设您正在对网格进行数据绑定。