C# 如何在c中获取Listbox的选定值#

C# 如何在c中获取Listbox的选定值#,c#,C#,我绑定了listbox,其中listbox的数据源是list。如何在listbox中获取选定列表项的选定值。我的示例代码如下 pdfList = attendanceDetailsPresenter.GetPredefinedDetails(); this.lstCompanies.DataSource = pdfList; this.lstCompanies.DisplayMember = "CompanyName"; this.

我绑定了listbox,其中listbox的数据源是list。如何在listbox中获取选定列表项的选定值。我的示例代码如下

        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()));
            }
        }
pdfList=attendanceDetailsPresenter.GetPredefinedDetails();
this.lstCompanies.DataSource=pdfList;
this.lstCompanies.DisplayMember=“CompanyName”;
this.lstCompanies.ValueMember=“CompID”;
this.lstDepartments.BindingContext=新的BindingContext();
this.lstDepartments.DataSource=pdfList;
this.lstDepartments.DisplayMember=“DepartmentName”;
this.lstDepartments.ValueMember=“DeptID”;
如果(lstCompanies.SelectedItems.Count<0)
{
MessageBox.Show(“请选择任意一家公司”);
返回attendanceCalculationDetailsDataList;
}
其他的
{
对于(int i=0;i

有人能解决我的问题吗?首先,列表的计数不能小于零。它总是
=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
尝试将此更改为:

for (int i = 0; i < lstCompanies.SelectedItems.Count; i++ )
{
    attendanceCalculationDetailsData.CompanyID.Add(((<WhatEverClassYouUse>)lstCompanies.SelectedItems[i]).CompanyID);
}
for(int i=0;i
说明:如果列表中选择了多个项目,则这些项目将添加到
SelectedItems
集合中。您可以迭代这些项。每个项目都是
数据行视图
(当数据绑定到
数据表
数据视图
时)的对象或集合中的类


由于您没有告诉我们通过
GetPredefinedDetails
返回的对象类型,因此我将其替换为
WhatEverClassYouUse
。将其转换为正确的类型。

为什么不循环
foreach(lstCompanies.SelectedItems中的var selectedItem)
?另一个可能的错误:我认为这永远不会是真的:“lstCompanies.SelectedItems.Count<0”。我相信计数不可能是负数。你有没有试着在for循环中设置一个断点来看看发生了什么?使用Linq是不可能的吗?@neontapir这种情况让我想起了一个关于电梯的老笑话:如果两个人在电梯上,三个人下车,一个人必须进去,这样电梯就空了。我认为只有当数据源类型是
DataTable
DataView
时,项目的类型才是
DataRowView
,但我们似乎不确定数据源是什么类型。嗯,不确定。我还说他应该通过适当的调试来发现这一点。@ThorStenditTM在尝试将slecteditem类型转换为数据行视图时,它显示了一个错误。您可以说一些其他方法来做到这一点。@Siva是否调试了您的应用程序,并确保
SelectedItems
集合中的项实际上是类型
DataRowView