Как связать Enum из DataTable для выигрыша форм CheckedListBox

StackOverflow https://stackoverflow.com/questions/934188

  •  06-09-2019
  •  | 
  •  

Вопрос

у меня есть такой сценарий:

[Flags]
enum Colors : long
(
    red = 1,
    blue = 2,
    green = 4,
    yellow = 8,
)

DataTable dt = new DataTable();
dt.Columns.Add("PersonName", typeof(string));
dt.Columns.Add("CheckOption", typeof(bool));
dt.Columns.Add("Colors", typeof(long));

// note that the values in the Colors column are enumed values of chosen colors
dt.Rows.Add("Name 1", true, 1); // red
dt.Rows.Add("Name 2", true, 12);    // green and yellow
dt.Rows.Add("Name 3", true, 4); // green
dt.Rows.Add("Name 4", false, 11);   // red, blue and yellow

// bind the datatable to grid
DataGridView dgv = new DataGridView();
dgv.DataSource = dt;
// hide the colors in the grid 
dgv.Columns["Colors"].Visible = false;

// checked list box has all items from the enum
CheckedListBox clb = new CheckedListBox();
string[] colorsArray = Enum.GetNames(typeof(Colors));
clb.Items.AddRange(colorsArray);

мне бы хотелось каким-то образом правильно привязать перечисляемое значение выбранных цветов в столбце «Цвета» таблицы данных к CheckedListBox.Является ли это возможным?

до сих пор я играл с событием RowEnter сетки, но это кажется очень хрупким и совсем не приятным.

РЕДАКТИРОВАТЬ:например, если бы у меня был четвертый столбец в таблице данных под названием MyText, я мог бы привязать этот столбец к текстовому полю следующим образом:

myTextBox.DataBindings.Add("Text", dt, "MyText");

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

Это было полезно?

Решение

Не существует простого способа сделать это, поскольку это не типичный сценарий основных деталей.Думаю, вам все-таки стоит начать писать этот код.

Другие советы

Я не совсем понимаю, что вам нужно, но можете ли вы использовать жадный алгоритм, чтобы определить, какие цвета используются?

Например, у вас есть число 11.Единственный возможный способ получить 11 — использовать желтый цвет, поэтому вы удаляете самое большое подходящее число (8) и устанавливаете соответствующий флажок.Тогда вы получите 3.Наибольшее подходящее число — 2 (синее), тогда остаток очевиден.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top