0

我已经绑定了列表框的数据源为列表的列表框。如何在列表框中获取选定列表项的选定值。我的示例代码如下

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

谁能解决我的问题。

4

1 回答 1

2

首先,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(当数据绑定到 aDataTable或时DataView)或集合中的一个类。

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

于 2013-06-03T13:52:36.207 回答