在我的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