Domanda

ho questo scenario:

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

Quello che mi piacerebbe è quello di legare in qualche modo il valore enumed di colori scelti nella colonna di DataTable "Colori" al CheckedListBox in un bel modo. è possibile?

Finora ho giocato con l'evento RowEnter della griglia, ma questo sembra molto fragile e non molto bello a tutti.

EDIT: per esempio se ho avuto una quarta colonna DataTable chiamato MyText ho potuto legarsi quella colonna di una casella di testo come questo:

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

quando si muove attraverso le righe di una datagrid il valore nella casella di testo cambia automaticamente ed eventuali aggiornamenti del testo vengono salvati al DataTable. vorrei ottenere questo functionalty dal CheckListBox e enumerazioni troppo.

È stato utile?

Soluzione

Non v'è alcun modo semplice per farlo come questo non è un tipico scenario maestro dettagli. Credo che si dovrebbe iniziare scrivendo che il codice dopotutto.

Altri suggerimenti

Non sono esattamente sicuro di quello che stai dopo, ma si può usare un algoritmo greedy per determinare quali colori vengono utilizzati?

Per esempio, si ha il numero 11. L'unico modo possibile per ottenere 11 è di avere colore giallo, in modo da rimuovere il maggior numero che si adatta (8), e controllare la casella corrispondente. Quindi si ottiene 3. Il più grande numero che si adatta è 2 (blu), poi il resto è evidente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top