C# - 如何根据特定值设置 ComboBox 的选中项?

7
我已经有了一个已填充的ComboBox,我想做的就是根据它的值将其设置为特定的selectedItem。
我尝试了以下代码,但没有任何反应:
comboPublisher.SelectedValue = livre.Editeur;

考虑到我已经在我的类Editeur中实现了Equals(..)方法,如下所示:
  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;

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

1
注意,SelectedValue 只在您指定了 ValueMember 的情况下才起作用。因此,SelectedItem 是下一个选择。 - AMissico
4个回答

3

设置文本属性。


我相信它一直有效,因为你是以编程方式设置的。(我需要验证一下。) - AMissico

2

如果你使用WinForm,需要设置DataSources;如果你使用WPF,则需要设置ItemsSource,这样才能正确地使用SelectedValue

[更新]不要直接将每个项目添加到下拉框中,你应该创建一个集合来保存这些项目,然后将其设置为你的数据源(WinForm)/项源(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

你创建了一个新的Equals实现,隐藏了Object中的Equals方法。尝试使用public override bool声明它,看看是否有所帮助。


你说得对,我忘记了override。不过这仍然不能解决问题 :( - Amokrane Chentir
我总是使用SelectedItem...也许这就是原因。 :) - Dave

0
我认为你还需要在Editeur类中实现IEquatable,但是要将对象作为参数传递。就像这样。你的代码其余部分都很好。
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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接