代码之家  ›  专栏  ›  技术社区  ›  Timothy Carter

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

  •  17
  • Timothy Carter  · 技术社区  · 17 年前

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

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

    2 回复  |  直到 17 年前
        1
  •  42
  •   Ozgur Ozcitak Vikash Choudhary    17 年前

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

    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);
    
        2
  •  3
  •   Jimi    7 年前

    或者,如果需要对枚举数值进行一些过滤,可以循环使用 Enum.GetValues(typeof(EnumeratorName))

    dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)
    

    另外,您可以将DataGridView的数据源设置为BindingSource对象,而不是使用DataTable,将BindingSource对象的数据源设置为 BindingList<Your Class> ,通过传递 IList

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