在我的Asp.NET网站上,我有一个允许多选的列表框。我希望能够问这样的问题:列表框中的选定项目是否有ASP.NET集合?
blah = myListbox.selectedItems;
并给出在列表框中选择的项目的集合。看起来在Windows Forms世界中有一种方法,但不适用于asp.net。有没有更简单的方法来做到这一点,而不只是遍历Items集合寻找选定的值?
在我的Asp.NET网站上,我有一个允许多选的列表框。我希望能够问这样的问题:列表框中的选定项目是否有ASP.NET集合?
blah = myListbox.selectedItems;
并给出在列表框中选择的项目的集合。看起来在Windows Forms世界中有一种方法,但不适用于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();
由于欧莱建议的扩展方法可能是的LINQ指明分数和周四缩小下来,甚至还用于:
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;
使用扩展方法,你可以使它更简单,如果你需要做这种事情分配。
yeup - 它遍历集合,但据我所知,没有更好的方法 – Rob 2009-08-26 18:46:05