2009-02-23 4 views
1

J'ai un DataGridView qui a une colonne ComboBox. Je remplir la liste de cette colonne avec des éléments d'un type terrain:DataGridViewComboBoxColumn - type d'éléments dans la liste déroulante

DataGridViewComboBoxColumn fieldsColumn = argumentsDataGridView.Columns["field"] as DataGridViewComboBoxColumn; 
      foreach (Field field in SessionData.Fields) 
       fieldsColumn.Items.Add(field); 
      fieldsColumn.DisplayMember = "Name"; 

Puis, après l'action de certains utilisateurs, je mets une valeur dans la cellule de cette colonne comme ceci:

private void AddArgument(string argumentName, Field field) 
     { 
      int index = argumentsDataGridView.Rows.Count; 
      argumentsDataGridView.Rows.Add(new DataGridViewRow()); 
      DataGridViewRow newRow = argumentsDataGridView.Rows[index]; 
      newRow.Cells["nameArg"].Value = argumentName; 
      -> newRow.Cells["field"].Value = field; 
     } 

Si je maintenant accès la valeur de la cellule, elle est de type Champ. Si je sélectionne un élément différent du combo, la valeur de la cellule devient une chaîne. Comment puis-je le gérer? J'ai besoin d'articles de type Champ.

+0

Comment allez-vous faire fonctionner cela? Lorsque j'ai exécuté un test simple, j'obtiens une exception System.ArgumentException? – BFree

+0

où obtenez-vous cette exception? – agnieszka

+0

J'ai créé une classe fictive avec trois propriétés. J'ai ensuite créé une liste de quelques-uns de ces objets, et les ai ajoutés à la ComboBoxColumn comme dans votre première méthode. Ensuite, j'ai répliqué votre deuxième méthode, en ajoutant une autre ligne, et en ajoutant un autre objet, mais ensuite obtenir une exception. – BFree

Répondre

3

la solution était de créer une propriété Self en classe Champ:

public Field Self 
     { 
      get { return this; } 
     } 

et est fixé comme ValueMember de la colonne de zone de liste déroulante.
Je pensais que sans spécifier ValueMember ce est une valeur de retour par défaut et j'avais tort.

+0

Merci pour le conseil. La liaison WPF est bien meilleure. – Larry

Questions connexes