为什么我的Listbox返回错误的Item

时间:2013-12-18 11:18:59

标签: c# visual-studio-2010 sorting data-binding listbox

我通过数据源(一个BindingList)填充一个已排序的ListBox(lbCustomer)。 BindingList包含具有一堆属性的Items(customer)。 DisplayMember是属性“name”,ValueMember是属性“id”。现在,当单击一个Item时,我在ClickEvent中看到我的lbCustomer是正确的Item,但是SelectedValue是错误的。事实上,lbCustomer.SelectedValue返回id,好像没有排序一样,所以如果我选择ListBox中的第一个项目,它会从我的DataSource-BindingList返回实际的第一个(未排序的)customer.id。这是通常的结果吗?我认为使用DisplayMember和ValueMember是为了防止这种行为。我怎么能阻止这种情况(不需要在开始时对我的BindingList进行排序)?

这是我的list-和combo-Boxes与DataSource连接的代码:

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

0 个答案:

没有答案