2010-03-05 15 views
7

Tengo este ComboBox ya lleno y todo lo que quiero hacer es establecerlo en un elemento seleccionado específico conociendo su valor.C# - ¿Cómo configurar un elemento seleccionado de ComboBox a partir de un valor específico?

estoy tratando esto, pero no pasa nada:

comboPublisher.SelectedValue = livre.Editeur; 

Teniendo en cuenta el hecho de que ya he implementado Iguales (..) método en mi clase Editeur, de esta manera:

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

Este es cómo llené mi ComboBox:

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

¿Alguna idea?

Gracias!

[EDIT]: Esto parece funcionar con:

comboPublisher.SelectedItem = livre.Editeur; 

mis iguales método es:

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

Nota, SelectedValue solo funciona si ha especificado el ValueMember. Por lo tanto, SelectedItem es la siguiente elección. – AMissico

Respuesta

2

Es necesario configurar DataSources en caso de WinForm/ItemsSource en caso de WPF a su cobobox entonces puedes usar SelectedValue correctamente.

[Actualización] En lugar de añadir cada artículo a su cuadro combinado directamente, debería crear la colección de mantener esos artículos y luego configurarlo como origen de datos (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

has creado una nueva implementación de Equals que oculta la de Object. Trate de declararlo con public override bool y vea si eso ayuda.

+0

Tienes razón, olvidé anular. Sin embargo, todavía no resuelve el problema :( –

+0

Funciona con SelectedItem en lugar de SelectedValue! –

+0

Siempre uso SelectedItem ... tal vez sea por eso. :) – Dave

3

Establezca la propiedad Texto.

+0

que solo funciona si IsEditable es True, ¿verdad? – Dave

+0

Creo que funciona todo el tiempo, porque está programando programáticamente. (Tendría que verificarlo) – AMissico

0

Piensa que también tienes que implementar IEquatable en la clase Editeur, pero pasar un objeto como argumento. Algo como esto. El resto de tu código está 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; 
} 
Cuestiones relacionadas