2009-12-02 22 views
13

Herkes, bir liste kutusu denetiminde seçili öğelerini tüm uzantı yöntemlerini kullanarak almanın sorunsuz bir yolunu biliyor mu?Tüm seçili öğeleri asp.net'den alın. ListBox

Ve, çünkü sonunda her şey bana olarak böyle bir liste alır nasıl o alakasız ait argümanı yedek lütfen öğeleri üzerinde yineleme ve yine seçilmiş olanları bulmak için bir döngü kullanır.

cevap

26
var selected = yourListBox.Items.GetSelectedItems(); 
//var selected = yourDropDownList.Items.GetSelectedItems(); 
//var selected = yourCheckBoxList.Items.GetSelectedItems(); 
//var selected = yourRadioButtonList.Items.GetSelectedItems(); 

public static class Extensions 
{ 
    public static IEnumerable<ListItem> GetSelectedItems(
      this ListItemCollection items) 
    { 
     return items.OfType<ListItem>().Where(item => item.Selected); 
    } 
} 
+1

Teşekkür ederiz! Bu harika. – Jagd

5

Uzatma yöntemi:

public static List<ListItem> GetSelectedItems(this ListBox lst) 
{ 
    return lst.Items.OfType<ListItem>().Where(i => i.Selected).ToList(); 
} 

Sen gibi liste üzerinde diyebilirsiniz:

List<ListItem> selectedItems = myListBox.GetSelectedItems(); 

Yapabilirsin da kullanarak dönüşüm yapmak bir gibi liste kutusu öğeleri 'Yayınla' :

return lst.Items.Cast<ListItem>().Where(i => i.Selected).ToList(); 

Hasta daha iyi OfType veya Cast (benim önsezim Cast'dur) gerçekleştirir. Gerçekten bu çok daha yararlı uzatma yöntemini yapacak bir jenerik ListControl yöntemi için Ruben'in görüşleri doğrultusunda

Düzenleme:

public static List<ListItem> GetSelectedItems(this ListControl lst) 
{ 
    return lst.Items.OfType<ListItem>().Where(i => i.Selected).ToList(); 
} 
+0

Ayrıca "ListBox" yerine "ListControl" için de değişiklik yapabilirsiniz, bu nedenle eklentiniz tüm liste kontrolleri için çalışır, "DropDownList", "CheckBoxList", "RadioButtonList" ve benzeri –

+0

İyi fikir. . – Kelsey

+0

'Cast' biraz daha hızlı, ancak InvalidCastException'ya yol açabilir; Cast'ler burada geçerlidir, çünkü 'Items.Add' '' ListItem' nesnelerini alırsınız –

1

Merhaba ben VB kullanarak bu yazı bu sorun için bir çözüm oluşturduk. NET:

:

Getting all selected values from an ASP ListBox

aşağıda Bu kod yukarıdaki bağlantıyı aynıdır

Public Shared Function getSelectedValuesFromListBox(ByVal objListBox As ListBox) As String 
Dim listOfIndices As List(Of Integer) = objListBox.GetSelectedIndices().ToList() 
Dim values As String = String.Empty 

For Each indice As Integer In listOfIndices 
    values &= "," & objListBox.Items(indice).Value 
Next indice 
If Not String.IsNullOrEmpty(values) Then 
    values = values.Substring(1) 
End If 
Return values 
End Function 

Umarım yardımcı olur.

+0

İlk satırınız benim için VS2015’de derlenmez; ancak Dim listOfIndices() ile değiştirdiğinizde Integer = objListBox.GetSelectedIndices() hile gibi görünüyor – DJDave