从DataGridView中的枚举创建下拉列表选项

时间:2008-09-11 12:42:56

标签: c# .net winforms user-interface .net-2.0

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

另外,我已经尝试将DataGridView的DataSource分配给我的对象列表,但是当我这样做时,它对enum没有帮助,我无法在DataGridView中创建新行,但是我我绝对没有必要使用DataTable作为我的DataSource,它只是我半工作的选项。

3 个答案:

答案 0 :(得分:37)

我不知道这是否适用于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);

答案 1 :(得分:3)

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

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

除此之外,您可以将DataGridView的DataSource设置为BindingSource对象,而不是使用DataTable,将BindingSource对象的DataSource设置为BindingList<Your Class>,您可以通过传递{{}来填充它。 1}}进入构造函数。

实际上,我很想知道在没有数据表的情况下使用DataTable是否比使用DataTable更好(即从数据库调用中返回)。

答案 2 :(得分:0)

    if(e.KeyCode == Keys.Oem3)
    {

    }

这对我有用