2009-12-02 15 views
13

Qualcuno sa di un modo semplice per ottenere tutti gli elementi selezionati in un controllo listbox utilizzando i metodi di estensione?Ricevi tutti gli elementi selezionati da asp.net ListBox

E, per favore, mi risparmi la tesi del è irrilevante di come si ottiene un elenco del genere, perché alla fine tutto utilizza un ciclo per scorrere le voci e trovare quelli selezionati in ogni caso.

risposta

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

Grazie! È grandioso – Jagd

5

metodo di estensione:

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

si può chiamare sul tuo listbox come:

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

Si potrebbe anche fare la conversione con un 'cast' sulle voci casella di riepilogo come :

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

Non sono sicuro che w mal performare meglio OfType o Cast (la mia impressione è Cast).

Modifica sulla base del feedback di Ruben per un metodo ListControl generico che sarebbe davvero rendere metodo di estensione molto più utile:

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

Puoi anche sostituire 'ListBox' per' ListControl', quindi la tua estensione funziona per tutti i controlli di lista, come 'DropDownList',' CheckBoxList', 'RadioButtonList' e così via –

+0

Buona idea .. aggiusterò la mia risposta per riflettere che . – Kelsey

+0

'Cast' è un po 'più veloce, ma può portare a' InvalidCastException'; sembra Cast è applicabile qui, dal momento che 'Items.Add' riceve solo oggetti' ListItem' –

1

Ciao Ho creato una soluzione per questo problema in questo post con VB. NET:

Getting all selected values from an ASP ListBox

Questo codice sotto è lo stesso del link qui sopra:

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 

spero che aiuta.

+0

La mia prima riga non viene compilata in VS2015 per me; ma sostituendolo con Dim listOfIndices() As Integer = objListBox.GetSelectedIndices() sembra fare il trucco – DJDave

Problemi correlati