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