18

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

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

4

2 回答 2

42

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

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

和:

MyEnum value = (MyEnum)comboBox1.SelectedValue;

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

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.Name = "My Enum Column";
col.DataSource = Enum.GetValues(typeof(MyEnum));
col.ValueType = typeof(MyEnum);
dataGridView1.Columns.Add(col);
于 2008-09-11T13:04:26.260 回答
3

或者,如果您需要对枚举器值进行一些过滤,您可以循环Enum.GetValues(typeof(EnumeratorName))并添加您想要使用的值:

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

顺便说一句,您可以将 DataGridView 的 DataSource 设置为 BindingSource 对象,而不是使用 DataTable,而将 BindingSource 对象的 DataSource 设置为 a BindingList<Your Class>,您可以通过将 an 传递IList给构造函数来填充该对象。

实际上,我很想从任何人那里知道这是否比在您还没有 DataTable 的情况下使用 DataTable 更可取(即它是从数据库调用返回的)。

于 2008-09-11T14:01:09.497 回答