我在运行时从数据库填充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;
}
答案 0 :(得分:2)
您可以使用ListBox.SelectedIndices
或ListBox.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);
}