C# 为什么我的列表框返回了错误的项目

C# 为什么我的列表框返回了错误的项目,c#,visual-studio-2010,sorting,data-binding,listbox,C#,Visual Studio 2010,Sorting,Data Binding,Listbox,我通过数据源(BindingList)填充一个排序列表框(lbCustomer)。BindingList包含具有一组属性的项(customer)。DisplayMember是属性“name”,ValueMember是属性“id”。现在,当单击一个项目时,我在ClickEvent中看到my lbCustomer是正确的项目,但SelectedValue是错误的。事实上,lbCustomer.SelectedValue返回的id就像没有排序一样,因此如果我在列表框中选择第一项,它将从数据源绑定列表中

我通过数据源(BindingList)填充一个排序列表框(lbCustomer)。BindingList包含具有一组属性的项(customer)。DisplayMember是属性“name”,ValueMember是属性“id”。现在,当单击一个项目时,我在ClickEvent中看到my lbCustomer是正确的项目,但SelectedValue是错误的。事实上,lbCustomer.SelectedValue返回的id就像没有排序一样,因此如果我在列表框中选择第一项,它将从数据源绑定列表中返回实际的第一个(未排序)customer.id。这是通常的结果吗?我认为使用DisplayMember和ValueMember是为了防止这种行为。如何防止这种情况发生(不需要在开始时对绑定列表进行排序)

以下是将列表框和组合框与数据源连接的代码:

private void SelectCorrectBox(bool dependence)
{
    DeactivateEvents();
    ChangeItems(lbCustomer, null, Entity.DataSource.LbCustomer.CustomerSource, false);

    if(!dependence)
        ChangeItems(null, cbCustomer, Entity.DataSource.LbCustomer.CustomerSource, false);
    ChangeItems(lbProdukt, null, Entity.DataSource.LbProdukt.ProduktSource, false);
    ChangeItems(null, cbProdukt, Entity.DataSource.LbProdukt.ProduktSource, false);

    //if(dependence)
        ChangeItems(lbVersion, null, Entity.DataSource.LbVersion.VersionSource, false);

    ChangeItems(lbKategorie, null, Entity.DataSource.LbKategorie.KategorieSource, false);
    ChangeItems(lbFehler, null, Entity.DataSource.LbFehler.FehlerSource, true);
    ActivateEvents();
}

private void ChangeItems(ListBox lb, ComboBox cb, object source, bool fehler)
{
    if (cb == null)
    {
        lb.DataSource = source;

        if (!fehler)
            lb.DisplayMember = "name";
        else
            lb.DisplayMember = "titel";

        lb.ValueMember = "id";
        lb.SelectedIndex = -1;
    }
    else if (cb != null)
    {
        cb.DataSource = source;
        cb.DisplayMember = "name";
        cb.ValueMember = "id";
        cb.SelectedIndex = -1;
    }
}

编辑:

解决方案是使用SelectedItem而不是SelectedValue:

之前:

private void lbCustomer_SelectedValueChanged(object sender, EventArgs e)
{
    EventStarter(lbCustomer.SelectedValue, "customer");
}
之后:

private void lbCustomer_SelectedValueChanged(object sender, EventArgs e)
{
    EventStarter(((Entity.Customer)lbCustomer.SelectedItem).id, "customer");
}