我绑定了listbox的数据源为list的列表框。我可以在listbox.my示例代码中获取所选列表项的选定值,如下所示
pdfList = attendanceDetailsPresenter.GetPredefinedDetails();
this.lstCompanies.DataSource = pdfList;
this.lstCompanies.DisplayMember = "CompanyName";
this.lstCompanies.ValueMember = "CompID";
this.lstDepartments.BindingContext = new BindingContext();
this.lstDepartments.DataSource = pdfList;
this.lstDepartments.DisplayMember = "DepartmentName";
this.lstDepartments.ValueMember = "DeptID";
if (lstCompanies.SelectedItems.Count < 0)
{
MessageBox.Show("Please Select Any one Company");
return attendanceCalculationDetailsDataList;
}
else
{
for (int i = 0; i < lstCompanies.SelectedItems.Count; i++ )
{
attendanceCalculationDetailsData.CompanyID.Add(int.Parse(lstCompanies.SelectedValue.ToString()));
}
}
请有人解决我的问题。
答案 0 :(得分:1)
首先,列表的Count
永远不会小于零。它总是>= 0
。
然后,当您对列表进行数据绑定时,这些项通常是DataRowView
类型(您应该可以通过调试应用程序来验证)。如果这是正确的,您应该将每个选定的项目转换为DataRowView
,然后将其Row
属性的值转换为您期望的类型。
我刚注意到在以下循环中你甚至没有使用所选的项目,但始终是SelectedValue
:
for (int i = 0; i < lstCompanies.SelectedItems.Count; i++ )
{
attendanceCalculationDetailsData.CompanyID.Add(int.Parse(lstCompanies.SelectedValue.ToString()));
}
尝试将其更改为:
for (int i = 0; i < lstCompanies.SelectedItems.Count; i++ )
{
attendanceCalculationDetailsData.CompanyID.Add(((<WhatEverClassYouUse>)lstCompanies.SelectedItems[i]).CompanyID);
}
说明:如果选择了列表中的多个项目,则会将项目添加到SelectedItems
集合中。您可以迭代这些项目。每个项目都是DataRowView
的对象(当数据绑定到DataTable
或DataView
时)或集合中的类。
由于您没有告诉我们GetPredefinedDetails
返回的对象类型,我将其替换为WhatEverClassYouUse
。将其转换为正确的类型。