2009-12-02 11 views
13

Quelqu'un sait-il d'une manière facile d'obtenir tous les éléments sélectionnés dans un contrôle de zone de liste en utilisant des méthodes d'extension?Obtenez tous les éléments sélectionnés de asp.net ListBox

Et, s'il vous plaît, épargnez-moi l'argument de c'est sans importance quant à la façon dont on obtient une telle liste parce qu'à la fin tout utilise une boucle pour itérer sur les articles et trouver les.

Répondre

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

Merci! C'est bien. – Jagd

5

méthode d'extension:

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

Vous pouvez appeler sur votre ListBox comme:

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

Vous pouvez également faire la conversion en utilisant un 'cast' dans la zone de liste des articles comme :

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

Vous ne savez pas quel mal exécuter mieux OfType ou Cast (mon intuition est Cast).

Modifier basé sur les commentaires de Ruben pour une méthode ListControl générique qui permettrait en effet méthode d'extension beaucoup plus utile:

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

Vous pouvez également remplacer 'ListBox' pour' ListControl', donc votre extension fonctionne pour tous les contrôles de liste, comme 'DropDownList',' CheckBoxList', 'RadioButtonList' et ainsi de suite –

+0

Bonne idée .. ajustera ma réponse pour refléter cela . – Kelsey

+0

'Cast' est un peu plus rapide, mais peut conduire à' InvalidCastException'; semble que Cast est applicable ici, puisque 'Items.Add' ne reçoit que des objets' ListItem' –

1

Bonjour j'avons créé une solution à ce problème dans ce post en utilisant VB. NET:

Getting all selected values from an ASP ListBox

Ce code ci-dessous est le même que le lien ci-dessus:

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 

J'espère que cela aide.

+0

Votre première ligne ne compile pas dans VS2015 pour moi; mais en le remplaçant par Dim listOfIndices() As Integer = objListBox.GetSelectedIndices() semble faire l'affaire – DJDave

Questions connexes