Добавление перечисления в комбинированный список - PullRequest
10 голосов
/ 18 марта 2011

Привет, могу ли я узнать, как получить приведенное ниже значение enum для привязки в выпадающий список?Я написал код ниже, который работает хорошо, но интересно, это лучший способ.

public enum CourseStudentStatus
{
  Active = 1,
  Completed = 2,
  TempStopped = 3,
  Stopped = 4,
}

//Bind Course Status
Dictionary<string, int> list = new Dictionary<string, int>();
foreach (int enumValue in Enum.GetValues(typeof(CourseStudentStatus)))
  list.Add(Enum.GetName(typeof(CourseStudentStatus), enumValue), enumValue);
var column = ((DataGridViewComboBoxColumn)dgv.Columns["studentCourseStatus"]);
column.DataPropertyName = "StudentStatus";              
column.DisplayMember = "Key";
column.ValueMember = "Value";
column.DataSource= list.ToList();

----------------- ОБНОВЛЕНИЕ -------------------
Привет, я изменил свой код на это в соответствии с Sanjeevakumar Hiremat, и он отлично работает.

cbStatus.DataSource = Enum.GetValues(typeof(CourseStudentStatus));

Однако, когда я хочу получить () и хочу привязать значение обратно к cbStatus, он приводит к ошибке {"Ссылка на объект не установлена ​​на экземпляр объекта."}
cbStatus.SelectedValue = Course.Status;.

Источник cbStatus.Datasource не пустой и имеет значение после привязки к cbStatus.DataSource = Enum.GetValues(typeof(CourseStudentStatus));

, пожалуйста, совет.

Ответы [ 2 ]

17 голосов
/ 18 марта 2011

Следующим должен быть самый простой способ связать его.

column.DataSource = Enum.GetValues(typeof(CourseStudentStatus));

Чтобы получить выбранное значение, вам необходимо привести его к типу enum.

CourseStudentStatus selectedValue = (CourseStudentStatus)column.SelectedValue

Enum.GetValues ​​ возвращает массив значений enumType, которые затем могут быть привязаны к любому элементу управления.

Я проверял это в отдельном комбинированном ящике, а не в столбце со списком в DataGridView, YMMV.

4 голосов
/ 18 марта 2011

Я не думаю, что есть лучший способ. Раньше я делал нечто подобное с классом GenericListItem<T>, где T - это базовое значение, в вашем случае - enum.

Этот класс предоставляет Display строку и Value T свойства для привязки. Я думаю, что я также переопределил ToString, потому что это значение по умолчанию, если вы не указали DisplayMember. Я пошел дальше и сделал конструктор, взяв всего Value и по умолчанию Display до Value.ToString, что, как мне кажется, в случае с перечислениями работает.

Затем я сделал бы List<GenericListItem<T>>, вставил бы его в DataSource столбца и соответственно установил свойства DisplayMember и ValueMember в коде. Этот список является альтернативой словарю, используемому в вашем примере.

Но я не говорю, что это лучшее решение :-) однако это означает, что вы можете удалить код, скажем, итерации enum, в этот класс или специализировать класс для лучшей обработки определенных типов данных, и все с конечной целью вставки в список и привязан к элементу управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...