2010-03-05 23 views
7

Mam już zapełniony ComboBox i wszystko, co chcę zrobić, to ustawić go na konkretny selectedItem znając jego wartość.C# - Jak ustawić wybrany element ComboBox na określoną wartość?

Próbuję to, ale nic się nie dzieje:

comboPublisher.SelectedValue = livre.Editeur; 

Biorąc pod uwagę fakt, że już wdrożone equals (..) metoda w klasie Editeur, w ten sposób:

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

ten jak zapełniam mój ComboBox:

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

Masz pomysł?

Dzięki!

[EDIT]: To wydaje się działać z:

comboPublisher.SelectedItem = livre.Editeur; 

My Równa metody jest:

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

Uwaga: SelectedValue działa tylko wtedy, gdy podano wartość ValueMember. Dlatego SelectedItem jest następnym wyborem. – AMissico

Odpowiedz

2

Musisz ustawić DataSources w przypadku WinForm/ItemsSource w przypadku WPF do listy cobobox, możesz poprawnie użyć SelectedValue.

[Aktualizacja] Zamiast dodać każdą pozycję do combobox bezpośrednio, należy utworzyć kolekcję, aby utrzymać te pozycje, a następnie ustawić go jako 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

stworzyłeś nową implementację równań, która ukrywa obiekt w Object. Spróbuj ogłosić to przy pomocy public override bool i sprawdź, czy to pomaga.

+0

Masz rację, zapomniałem o nadpisaniu. Nadal nie rozwiązuje problemu :( –

+0

Działa z SelectedItem zamiast SelectedValue! –

+0

Zawsze używam SelectedItem ... może dlatego. :) – Dave

3

Ustaw właściwość Tekst.

+0

, który działa tylko wtedy, gdy IsEditable jest True, prawda? – Dave

+0

Wierzę, że działa cały czas, ponieważ programujesz programowo. (Musiałbym zweryfikować.) – AMissico

0

Uważa się, że należy również wdrożyć IEquatable w klasie Editeur, ale przekazując obiekt jako argument. Coś takiego. Reszta twojego kodu jest w porządku.

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; 
} 
Powiązane problemy