2010-03-05 9 views
7

J'ai ce ComboBox déjà peuplé et tout ce que je veux faire est de le définir à un selectedItem spécifique connaissant sa valeur.C# - Comment définir un objet sélectionné ComboBox à partir d'une valeur spécifique?

Je suis en train, mais rien ne se passe:

comboPublisher.SelectedValue = livre.Editeur; 

Compte tenu du fait que je l'ai déjà mis en œuvre Equals, méthode (..) dans ma classe Editeur, de cette façon:

public bool Equals(IEditeur editeur) 
     { 
      return (this.Nom == editeur.Nom); 
     } 

Cette est comment je peuple mon ComboBox:

foreach (Business.IEditeur editeur in _livreManager.GetPublishers()) 
     { 
      comboPublisher.Items.Add(editeur); 
     } 

Une idée?

Merci!

[EDIT]: Cela semble fonctionner avec:

comboPublisher.SelectedItem = livre.Editeur; 

Ma méthode Equals est:

public override bool Equals(object obj) 
     { 
      IEditeur editeur = new Editeur(); 

      if (!(obj is System.DBNull)) 
      { 
       editeur = (IEditeur)obj; 
       return (this.Nom == editeur.Nom); 
      } 

      return false; 
     } 
+1

Remarque, SelectedValue ne fonctionne que si vous avez spécifié ValueMember. Par conséquent, SelectedItem est le prochain choix. – AMissico

Répondre

2

Vous devez définir DataSources en cas de WinForm/ItemsSource en cas de WPF à votre cobobox alors vous pouvez utiliser SelectedValue correctement.

[Mise à jour] Au lieu d'ajouter chaque article à votre combobox directement, vous devez créer la collection de tenir ces éléments, puis la définir comme DataSource (WinForm)/ItemsSource (WPF)

foreach (Business.IEditeur editeur in _livreManager.GetPublishers()) 
{ 
    //comboPublisher.Items.Add(editeur); 
    list.Add(editeur); 
} 

combobox.ItemsSource = editeur; 
combobox.SelectedValuePath = "value_property_name"; 
combobox.DisplayMemberPath = "display_property_name"; 
2

vous avez créé une nouvelle implémentation de Equals qui masque celle dans Object. Essayez de le déclarer avec public override bool et voyez si cela aide.

+0

Vous avez raison, j'ai oublié Override. Il ne résout cependant pas le problème :( –

+0

Il fonctionne avec SelectedItem au lieu de SelectedValue! –

+0

J'utilise toujours SelectedItem ... c'est peut-être pourquoi. :) – Dave

3

Définissez la propriété Text.

+0

qui ne fonctionne que si IsEditable est True, non? – Dave

+0

Je crois que cela fonctionne tout le temps, parce que vous définissez par programme. (Je devrais vérifier.) – AMissico

0

En pensant que vous devez également implémenter IEquatable dans la classe Editeur, mais en passant un objet en argument. Quelque chose comme ça. Le reste de votre code va bien.

public bool Equals(Editeur other) 
{ 
    return (this.Nom == other.Nom);    
} 

public override bool Equals(object obj) 
{ 
    if (obj is Editeur) 
    { 
     return Equals(obj as Editeur); 
    } 
    return false; 
} 
Questions connexes