C# - как установить ComboBox selectedItem из определенного значения?

у меня уже есть этот заполненный ComboBox, и все, что я хочу сделать, это установить его в определенный selectedItem, зная его значение.

Я пытаюсь, но ничего не происходит:

comboPublisher.SelectedValue = livre.Editeur;

учитывая тот факт, что я уже реализовал Equals(..) метод в моем классе Editeur, таким образом:

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

вот как я заполняю свой ComboBox:

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

есть идеи ?

спасибо !

[EDIT]: кажется, это работает с :

comboPublisher.SelectedItem = livre.Editeur;

мой метод Equals:

 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;
        }

4 ответов


необходимо указать DataSources в случае WinForm / ItemsSource в случае WPF для вашего cobobox вы можете использовать SelectedValue правильно.

[обновление] Вместо того, чтобы добавлять каждый элемент в combobox напрямую, вы должны создать коллекцию для хранения этих элементов, а затем установить ее в качестве источника данных (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";

задайте свойство Text.


вы создали новую реализацию Equals, которая скрывает ее в объекте. Попробуйте объявить его с помощью public override bool и посмотрим, поможет ли это.


in думаю, что вы также должны реализовать IEquatable в классе Editeur, но передать объект в качестве аргумента. Что-то вроде этого. Остальная часть кода в порядке.

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;
}