2009-06-01 7 views
1

j'ai ce scénario:Comment lier Enum de DataTable pour gagner des formes CheckedListBox

[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 au CheckedListBox dans une belle façon. est-ce possible? Jusqu'ici, j'ai joué avec l'événement RowEnter de la 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 i pourrait lier cette colonne à une zone de texte comme celui-ci:

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

lors du déplacement à travers les lignes d'une grille de données la valeur la zone de texte change automatiquement et toutes les mises à jour de la zone de texte sont enregistrées dans le datatable. Je voudrais obtenir cette fonctionnalité de la checklistbox et enums aussi.

Répondre

1

Il n'y a pas de moyen facile de le faire car ce n'est pas un scénario typique de détail principal. Je suppose que vous devriez commencer à écrire ce code après tout.

-1

Je ne suis pas exactement sûr de ce que vous recherchez, mais pouvez-vous utiliser un algorithme glouton pour déterminer quelles couleurs sont utilisées?

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

+0

Je n'ai aucun problème à trouver les couleurs qui sont choisies. ce que je veux, c'est lier ces valeurs à la liste de contrôle, donc je n'aurais pas à faire ce calcul chaque fois qu'une ligne de datagrid est sélectionnée. –

+0

Je suis désolé, je ne saurais pas comment faire ça. Cependant, je crois que même si vous allez lier ces valeurs, vous allez toujours recalculer chaque fois que la ligne est sélectionnée, n'est-ce pas? C'est juste plus abstrait. –

+0

ouais je suppose que je vais devoir ... je cherchais un moyen facile :) –

Questions connexes