Как установить ComboBox selectedItem из определенного значения? - PullRequest
7 голосов
/ 05 марта 2010

У меня уже есть этот заполненный 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);
        }

Есть идеи?

Спасибо!

[РЕДАКТИРОВАТЬ]: Кажется, это работает с:

comboPublisher.SelectedItem = livre.Editeur;

Мой метод равно:

 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 ]

3 голосов
/ 05 марта 2010

Установить свойство Text.

2 голосов
/ 05 марта 2010

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

2 голосов
/ 05 марта 2010

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

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

Думаю, вам также нужно реализовать 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...