从DataTable和枚举填充DataGridViewComboBoxColumn

时间:2015-01-26 14:07:21

标签: c# datagridview datatable enums

我正在尝试使用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 个答案:

答案 0 :(得分:0)

解决方法是将DataGridViewComboBoxColumn.DataSource绑定到包含两列DataTableDisplay的{​​{1}},并设置列Value和{{1} DisplayMember列名称的属性。

请参阅接受的答案:DataGridView linked to DataTable with Combobox column based on enum