我正在设置这样的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
的代码,但列表为空。
我该如何正确地做到这一点?
答案 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事件。然后,您可以根据该行的内容以编程方式设置组合框中的内容。
当然,这假设您正在对网格进行数据绑定。