2009-08-26 64 views
4

在我的Asp.NET网站上,我有一个允许多选的列表框。我希望能够问这样的问题:列表框中的选定项目是否有ASP.NET集合?

blah = myListbox.selectedItems; 

并给出在列表框中选择的项目的集合。看起来在Windows Forms世界中有一种方法,但不适用于asp.net。有没有更简单的方法来做到这一点,而不只是遍历Items集合寻找选定的值?

回答

9

像这样的东西应该让你所选的项目:

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; 
    } 
} 
+0

yeup - 它遍历集合,但据我所知,没有更好的方法 – Rob 2009-08-26 18:46:05

1

看起来好像你可以直接拿到物品,但GetSelectedIndices可能会有所帮助。

1

有没有这样的属性,但一个简单的LINQ查询获取你的结果快并且容易。

var selectedItems = from ListItem i in myListbox.Items where i.Selected select i; 

使用扩展方法,你可以使它更简单,如果你需要做这种事情分配。

+0

至少在我的PC上(可能是一个怪癖 - 它有更多的CTP的安装和卸载比我吃过晚餐! ),我需要为我指定类型: var selectedItems = from ListItem i in myListbox.Items where i.Selected select i; – Rob 2009-08-26 18:54:38

+0

啊不,你是绝对正确的。感谢您指出了这一点。我想我不仅不应该提交编译的代码,也不应该回答它。更新答案是正确的。 – olle 2009-08-26 19:02:01

相关问题