2009-08-26 66 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

相關問題