我正在尝试使用DataTable中的值填充DataGridView . DataGridView中的一个列应该列出一个ComboBox,用户可以从枚举中选择不同的值 . 应从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:无效的DataGridViewComboBoxCell-Value
一旦我设置col.DataPropertyName就会发生错误 . 所以问题是,如何将DataGridViewComboBoxColumn绑定到DataTable,其中一个列填充了枚举的值,并通过ComboBox DropDown我可以选择对枚举有效的所有值?
谢谢你的帮助
1 回答
解决方案是将
DataGridViewComboBoxColumn.DataSource
绑定到具有两列Display
和Value
的DataTable
,并将列的DisplayMember
和ValueMember
属性设置为DataTable
列名称 .请参阅接受的答案:DataGridView linked to DataTable with Combobox column based on enum