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

时间:2013-06-03 13:47:42

标签: c#

我绑定了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()));
            }
        }

请有人解决我的问题。

1 个答案:

答案 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的对象(当数据绑定到DataTableDataView时)或集合中的类。

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