Question

J'ai ce scénario:

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

ce que je voudrais est de lier en quelque sorte la valeur enumed des couleurs choisies dans la colonne « Couleurs » de datatable à la CheckedListBox d'une manière agréable. est-il possible?

jusqu'à présent je joue avec l'événement RowEnter de grille, mais cela semble très fragile et pas vraiment agréable du tout.

EDIT: par exemple si j'avais une 4ème colonne dans la table de données appelée MonTexte je pourrais lier cette colonne à une zone de texte comme ceci:

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

lors du déplacement à travers les lignes d'une grille de données la valeur dans la zone de texte change automatiquement et toutes les mises à jour de la zone de texte sont réenregistrés à datatable. je voudrais obtenir ce functionalty du checklistbox et énumérations aussi.

Était-ce utile?

La solution

Il n'y a pas de moyen facile de le faire que ce n'est pas un scénario de maître détail typique. Je suppose que vous devriez commencer ce code writting afterall.

Autres conseils

Je ne suis pas sûr de ce que vous êtes après, mais pouvez-vous utiliser un algorithme glouton pour déterminer les couleurs sont utilisées?

Par exemple, vous avez le numéro 11. La seule façon possible d'obtenir 11 est en ayant jaune, si vous supprimez le plus grand nombre qui correspond à (8), et cochez la case correspondante. Ensuite, vous obtenez 3. Le numéro qui correspond à plus grand est de 2 (bleu), le reste est évident.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top