Создайте параметры выпадающего списка из enum в DataGridView - PullRequest
17 голосов
/ 11 сентября 2008

В настоящее время у меня есть класс, и я пытаюсь создать простой графический интерфейс для создания коллекции этого класса. Большинство атрибутов этого класса являются строками. Тем не менее, один из атрибутов, которые я хочу задать пользователю, - это Enum. Поэтому я хотел бы, чтобы пользовательский интерфейс имел выпадающий список для этого перечисления, чтобы запретить пользователю вводить недопустимое значение. В настоящее время я беру начальный список объектов, добавляю их в DataTable и устанавливаю источник данных моего DataGridView в таблицу. Хорошо работает, даже создает столбец флажка для одного логического свойства. Но я не знаю, как превратить столбец для перечисления в выпадающий список. Я использую C # и .NET 2.0.

Кроме того, я попытался назначить источник данных DataGridView списку моих объектов, но когда я это делаю, это не помогает с перечислением, и я не могу создать новые строки в DataGridView, но Я определенно не связан с использованием DataTable в качестве моего DataSource, это просто вариант, который у меня есть полуработающий.

Ответы [ 3 ]

37 голосов
/ 11 сентября 2008

Я не знаю, будет ли это работать со столбцом 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);
3 голосов
/ 11 сентября 2008

Или, если вам нужно выполнить некоторую фильтрацию значений перечислителя, вы можете просмотреть Enum.GetValues(typeof(EnumeratorName)) и добавить те, которые вы хотите использовать:

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

Вместо этого, вместо использования DataTable, вы можете установить DataSource объекта DataGridView в объект BindingSource, а DataSource объекта BindingSource установить в BindingList<Your Class>, который вы заполняете, передавая IList в конструктор.

На самом деле, мне было бы интересно узнать от кого-либо, предпочтительнее ли использовать DataTable в ситуациях, когда у вас его еще нет (т. Е. Он возвращается из вызова базы данных).

0 голосов
/ 30 апреля 2019
    if(e.KeyCode == Keys.Oem3)
    {

    }

Это сработало для меня

...