关于C#:从DataGridView中的枚举创建下拉列表选项

关于C#:从DataGridView中的枚举创建下拉列表选项

Create drop down list options from enum in a DataGridView

我目前有一个类,并且我正在尝试创建一个简单的GUI来创建此类的集合。此类的大多数属性是字符串。但是,我希望用户能够设置的属性之一是枚举。因此,我希望用户界面对此枚举有一个下拉列表,以限制用户输入无效的值。当前,我正在获取对象的初始列表,将它们添加到DataTable并将DataGridView的DataSource设置到表中。效果很好,甚至为一个布尔属性创建了一个复选框列。但是,我不知道如何将枚举列变成下拉列表。我正在使用C#和.NET 2.0。

另外,我尝试将DataGridView的DataSource分配给我的对象列表,但是当我这样做时,它对枚举没有帮助,并且我无法在DataGridView中创建新行,但是我绝对不是绑定使用DataTable作为我的数据源,这只是我半工作的选择。


我不知道这是否适用于DataGridView列,但它适用于ComboBoxes:

1
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

和:

1
MyEnum value = (MyEnum)comboBox1.SelectedValue;

更新:它也适用于DataGridView列,只记得设置值类型。

1
2
3
4
5
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.Name ="My Enum Column";
col.DataSource = Enum.GetValues(typeof(MyEnum));
col.ValueType = typeof(MyEnum);
dataGridView1.Columns.Add(col);

或者,如果需要对枚举器值进行一些过滤,则可以遍历Enum.GetValues(typeof(EnumeratorName))并使用以下命令添加所需的值:

1
dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

顺便说一句,您可以不使用DataTable,而可以将DataGridView的DataSource设置为BindingSource对象,并将BindingSource对象的DataSource设置为BindingList,您可以通过将IList传递给构造函数来进行填充。

实际上,我想从任何人那里了解是否比在没有DataTable的情况下使用DataTable更好(即,它是从数据库调用返回的)。


推荐阅读