【发布时间】:2009-08-26 18:40:33
【问题描述】:
在我的 Asp.NET 网站上,我有一个允许多项选择的列表框。我希望能够问这样的问题:
blah = myListbox.selectedItems;
并获得在列表框中选择的项目的集合。看起来在 Windows 窗体世界中有一种方法,但对于 asp.NET 没有。有没有比遍历 Items 集合寻找选定值更简单的方法?
【问题讨论】:
在我的 Asp.NET 网站上,我有一个允许多项选择的列表框。我希望能够问这样的问题:
blah = myListbox.selectedItems;
并获得在列表框中选择的项目的集合。看起来在 Windows 窗体世界中有一种方法,但对于 asp.NET 没有。有没有比遍历 Items 集合寻找选定值更简单的方法?
【问题讨论】:
这样的事情应该会让你选择项目:
List<ListItem> selectedItems = new List<ListItem>();
int[] selectedItemsIndexes = myListbox.GetSelectedIndices();
foreach (int selectedItem in selectedItemsIndexes)
{
selectedItems.Add(myListbox.Items[selectedItem]);
}
作为扩展方法:
public static class ListBoxExtensions
{
public static List<ListItem> GetSelectedItems(this ListBox listbox)
{
List<ListItem> selectedItems = new List<ListItem>();
int[] selectedItemsIndexes = listbox.GetSelectedIndices();
foreach (int selectedItem in selectedItemsIndexes)
{
selectedItems.Add(listbox.Items[selectedItem]);
}
return selectedItems;
}
}
所以现在你可以打电话了:
List<ListItem> selectedItems = myListBox.GetSelectedItems();
正如 olle 所建议的,扩展方法可以是 Linq-ified 并因此进一步缩小到:
public static class ListBoxExtensions
{
public static IEnumerable<ListItem> GetSelectedItems(this ListBox listbox)
{
var selectedItems = from ListItem i in myListbox.Items where i.Selected select i
return selectedItems;
}
}
【讨论】:
您似乎无法直接获得这些物品,但GetSelectedIndices 可能会有所帮助。
【讨论】:
没有这样的属性,但简单的 linq 查询可以让您快速轻松地获得结果。
var selectedItems = from ListItem i in myListbox.Items where i.Selected select i;
如果你需要做这种事情,使用扩展方法可以让它变得更简单。
【讨论】: