我正在尝试使用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我可以选择对枚举有效的所有值?
感谢您的帮助
答案 0 :(得分:0)
解决方法是将DataGridViewComboBoxColumn.DataSource
绑定到包含两列DataTable
和Display
的{{1}},并设置列Value
和{{1} DisplayMember
列名称的属性。
请参阅接受的答案:DataGridView linked to DataTable with Combobox column based on enum