我正在尝试用 DataTable 中的值填充 DataGridView。 DataGridView 中的列之一应列出一个组合框,用户可以在其中从枚举中选择不同的值。初始值应该从DataTable中读取
代码:
enum MyEnum {I1 = 1, I2 = 2, I3 = 3}
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("List", typeof(MyEnum));
//fill table
for(int i = 0; i < 10; i++)
{
var row = table.NewRow();
table.Rows.Add(row);
row["ID"] = i;
row["List"] = MyEnum.I2;
}
//build DataGridView and fill it with DataTable
dataGridView1.AutoGenerateColumns = false;
//Column1
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "ID", DataPropertyName = "ID" });
//Column2
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.Name = "My Enum Column";
col.DataSource = Enum.GetValues(typeof(MyEnum));
col.ValueType = typeof(MyEnum);
col.DataPropertyName = "List";
dataGridView1.Columns.Add(col);
dataGridView1.DataSource = table;
执行代码时,出现以下错误:System.FormatException: Invalid DataGridViewComboBoxCell-Value
错误发生在我设置 col.DataPropertyName 时。 所以问题是,我如何将 DataGridViewComboBoxColumn 绑定(bind)到 DataTable,其中一列填充了枚举中的值,并通过 ComboBox DropDown 我可以选择对枚举有效的所有值?
谢谢你的帮助
最佳答案
解决方案是将 DataGridViewComboBoxColumn.DataSource
绑定(bind)到具有两列的 DataTable
,Display
和 Value
并将列的 DisplayMember
和 ValueMember
属性设置为 DataTable
列名。
请参阅已接受的答案:DataGridView linked to DataTable with Combobox column based on enum
关于c# - 从 DataTable 和枚举填充 DataGridViewComboBoxColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28151634/