2009-04-14 4 views
2

Si vous avez un DataTable qui a une colonne de type Enum.DataGridView lié à DataTable. Obtention de combobox pour les énumérations

Et vous liez un DataGridView à ce DataTable (myDgv.DataSource = myDataTable) ..

Comment pouvez-vous faire le DataGridView montrent une combobox (ou est-ce déroulante liste? Celui où la seule chose que vous pouvez faire est sélectionnez) dans chaque cellule de pour cette colonne? La zone de liste déroulante doit avoir la valeur actuelle sélectionnée et les autres valeurs d'énumération possibles sélectionnables. À l'heure actuelle, ces cellules affichent les anciennes cellules de texte modifiables avec la représentation sous forme de chaîne de la valeur enum dans celles-ci.

Répondre

4

Je suggère que vous avez lu Forcing the DataGridView to do my bidding - a tale of ComboBox hackery:

Au début, je suis optimiste sur les échantillons DataGridView (aperçu) (Télécharger les échantillons DataGridView), mais je ne vois rien qui fait ce que je voulais faire: prendre une valeur enum et le représenter dans la grille avec une combobox. Alors, voici comment je l'ai fait.

Aussi, vous devriez vérifier How to: Bind Objects to Windows Forms DataGridView Controls:

L'exemple de code suivant montre comment lier une collection d'objets à un contrôle DataGridView de sorte que chaque objet affiche comme une ligne distincte. Cet exemple illustre également comment afficher une propriété avec un type d'énumération dans un DataGridViewComboBoxColumn afin que la liste déroulante de zone de liste déroulante contienne les valeurs d'énumération.

2

Eh bien, je ne sais pas si ce que je vais dire ici fits, mais j'avais récemment une exigence similaire: afficher un lien dans un DataGridView lié à un DataSet, c'est

protected void grvResultado_RowDataBound(object sender, GridViewRowEventArgs e) { 
    if (grvResultado.HeaderRow == null || grvResultado.HeaderRow.Cells.Count == 0) return; 
    bool hasLink = false; 
    int ind = 0; 
    foreach (TableCell c in grvResultado.HeaderRow.Cells) { 
     if (c.Text == "link") { 
      hasLink = true; 
      break; 
     } 
     ind++; 
    } 
    if (!hasLink) return; 


    if (e.Row.RowType == DataControlRowType.DataRow) { 
     TableCell c = e.Row.Cells[ind]; 
     var lnk = new HyperLink(); 
     lnk.Text = "Ver"; 
     lnk.NavigateUrl = c.Text; 
     c.Controls.Clear(); 
     c.Controls.Add(lnk); 
    } 
} 

Vous pouvez habituer ce dont vous avez besoin comme je l'ai fait

Questions connexes