无法从列表框中检索多个值c#

时间:2014-09-25 13:47:42

标签: c# winforms visual-studio listbox windows-forms-designer

我在运行时从数据库填充listBox,如下所示:

List<FILE_REPORT_TYPES> ReportTypes = GetReportTypesFromDatabase(ReportMappingIds)
BindingList<FILE_REPORT_TYPES> pbReportTypesBindingList = new BindingList<FILE_REPORT_TYPES>(ReportTypes);

listBoxReports.DataSource = ReportTypesBindingList;
listBoxReports.DisplayMember = "REPORT_DESCRIPTION";
listBoxReports.ValueMember = "REPORT_ID";

然后,我想在运行Windows窗体时在listBox上选择多个项目,并检索我选择的每个单独的值。如果只做出一个选择,则可以执行以下操作:

listBoxReports.SelectedValue;

我想做以下事情:

var list = listBoxReports.SelectedValues;

然而,这是不允许的,即&#34; SelectedValues&#34;不存在。

有些人错误地建议在这种特殊情况下可以使用SelectedIndices。它无法使用,我正在尝试检索&#34; VALUE&#34;。这是不可能的(在这种特殊情况下):

listBox.Items[i].Value; 

我认为解决方案应该遵循:

    foreach(var line in listBox.Items)
       {
           var res= ((SOME CASTING)line).Value;
       }

5 个答案:

答案 0 :(得分:2)

您可以使用ListBox.SelectedIndicesListBox.SelectedItems

如果您想获得所有选定项目,可以让foreach演员:

foreach(FILE_REPORT_TYPES frt in listBox.SelectedItems)
{
   // ...
}

或者如果你想在LINQ的帮助下将ReportID放到一个列表中:

List<decimal> reportIds = listBox.SelectedItems.Cast<FILE_REPORT_TYPES>()
    .Select(frt => frt.REPORT_ID)
    .ToList();

答案 1 :(得分:2)

要获取所选项目,您有2个选项

a。)ListBox.SelectedIndices返回所选项目的索引,然后您需要使用这些索引在Items属性中查找值是什么或

b。)ListBox.SelectedItems返回一个包含所选项目的集合(请注意它是一个对象列表,因此您需要将项目转换为适当的数据类型)。

编辑:使用附加信息可以进行以下操作

List<FILE_REPORT_TYPES> mySelectedList = new List<FILE_REPORT_TYPES>();
foreach (Object selectedItem in ListBox.SelectedItems)
{
    mySelectedList.Add( ((FILE_REPORT_TYPES)selectedItem) );
}

答案 2 :(得分:0)

您可以执行以下操作替代所选值

listBoxReports.SelectedItems;

答案 3 :(得分:0)

您可以尝试以下

   List<FILE_REPORT_TYPES> reportList = new List<FILE_REPORT_TYPES>();

   foreach(var item in listBox.SelectedItems)
   {        
        reportList.Add((FILE_REPORT_TYPES)item);
   }

答案 4 :(得分:0)

答案(演员阵容):

List<decimal> reportIds = new List<decimal>();

foreach(var line in listBoxReports.SelectedItems)
{
    reportIds.Add(((PB_FILE_REPORT_TYPES)line).REPORT_ID); 
}