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

Blo*_*ard 11 .net c# datagridview

我正在建立一个DataGridViewComboBoxColumn这样的:

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

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

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

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

但是,此代码无效 - 每行仍显示"a","b","c".

我曾尝试更换new string[]new List<string>new BindingList<string>,都无济于事.

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

我该如何正确地做这件事?

SwD*_*n81 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" };
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 好吧,问题与我的DataGridView将AutoSizeColumnMode设置为AllCells这一事实有关.我认为它是在设置数据源(或其他东西)之前验证单元格的值. (3认同)