Pregunta

tengo este escenario:

[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);

Lo que me gustaría es unir de alguna manera el valor enumed de colores elegidos en la columna de "colores" de la tabla de datos a CheckedListBox de una manera agradable. ¿es posible?

Hasta ahora he estado jugando con el evento RowEnter de parrilla, pero esto parece muy frágil y no muy agradable en absoluto.

EDIT: por ejemplo, si tuviera una cuarta columna de la tabla de datos en la llamada MyText que podría obligar a que la columna a un cuadro de texto como este:

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

cuando se mueve a través de las filas de una cuadrícula de datos el valor en el cuadro de texto cambia de forma automática y las actualizaciones a la caja de texto se guardan de nuevo a la tabla de datos. me gustaría conseguir este functionalty del CheckListBox y enumeraciones también.

¿Fue útil?

Solución

No hay manera fácil de hacerlo ya que esto no es un escenario típico maestro detalle. Creo que se debe comenzar escribiendo código que después de todo.

Otros consejos

No estoy exactamente seguro de lo que está buscando, pero puede utilizar un algoritmo voraz para determinar qué colores están siendo utilizados?

Por ejemplo, usted tiene el número 11. La única forma posible de conseguir 11 es por tener amarilla, por lo que se quita el número más grande que se ajuste (8), y marca la casilla correspondiente. A continuación, se obtiene 3. Mayor número que se ajuste es 2 (azul), entonces el resto es obvio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top