2009-10-18 14 views
17

Ich habe eine ASP ListBox, die den SelectionMode auf "Multiple" festgelegt hat. Gibt es eine Möglichkeit, ALLE ausgewählten Elemente und nicht nur die letzten zu erreichen?Abrufen aller ausgewählter Werte aus einer ASP ListBox

<asp:ListBox ID="lstCart" runat="server" Height="135px" Width="267px" SelectionMode="Multiple"></asp:ListBox> 

Mit lstCart.SelectedIndex nur gibt das letzte Element (wie erwartet). Gibt es etwas, das mir alles auswählt?

Dies ist für ein Webformular.

Antwort

50

Sie können das ListBox.GetSelectedIndices method verwenden und die Ergebnisse übergehen und dann über die Elementauflistung auf jedes zugreifen. Alternativ können Sie alle Elemente durchlaufen und ihre Selected property überprüfen.

// GetSelectedIndices 
foreach (int i in ListBox1.GetSelectedIndices()) 
{ 
    // ListBox1.Items[i] ... 
} 

// Items collection 
foreach (ListItem item in ListBox1.Items) 
{ 
    if (item.Selected) 
    { 
     // item ... 
    } 
} 

// LINQ over Items collection (must cast Items) 
var query = from ListItem item in ListBox1.Items where item.Selected select item; 
foreach (ListItem item in query) 
{ 
    // item ... 
} 

// LINQ lambda syntax 
var query = ListBox1.Items.Cast<ListItem>().Where(item => item.Selected); 
+0

Danke. Ich habe es mit der 2. Lösung, die du gegeben hast, gearbeitet. –

+0

Kein Problem! Ich habe Code hinzugefügt, um die verschiedenen Ansätze zu zeigen. Die Artikelsammlung muss umgewandelt werden, wenn Sie sich für die Verwendung von LINQ entscheiden. –

+1

LINQ Lamba Regeln. Danke für die Hilfe. –

3

Verwendung GetSelectedIndices Methode der listbox

List<int> selecteds = listbox_cities.GetSelectedIndices().ToList(); 

     for (int i=0;i<selecteds.Count;i++) 
     { 
      ListItem l = listbox_cities.Items[selecteds[i]]; 
     } 
0

versuchen diesen Code verwenden ich mit VB.NET erstellt:

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 

Ich hoffe, es hilft.

Verwandte Themen