c# - 从 DataTable 和枚举填充 DataGridViewComboBoxColumn

标签 c# datagridview datatable enums

我正在尝试用 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)到具有两列的 DataTableDisplayValue 并将列的 DisplayMemberValueMember 属性设置为 DataTable 列名。

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

关于c# - 从 DataTable 和枚举填充 DataGridViewComboBoxColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28151634/

相关文章:

c# - ThreadStart返回值?

c# - 从 SELECT 语句生成 CREATE TABLE 脚本

c# - 删除 gridview 选择器列

c# - 如何格式化 DataGridView 中的 DateTime 列?

powershell - 使用当前日期时间将日期时间添加到数据表中?

c# - 以集合作为输入多次调用 Action<T>

c# - 使用 DataGridView 从另一种形式的 TextBox 中显示数据库信息

javascript - Jquery/Javascript 数据表 : How to display row data into html textfield on row selection

java - Primefaces 中的过滤器 DataTable 仅工作一次

c# - 使用 LINQ 将值一分为二