2009-10-18 2 views
17

Mam Listbox ASP, który ma ustawiony Tryb Selection na "Wiele". Czy istnieje sposób na odzyskanie WSZYSTKICH wybranych elementów, a nie tylko ostatniego?Uzyskiwanie wszystkich wybranych wartości z listy kontrolnej ASP ListBox

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

Po prostu zwraca ostatni element (zgodnie z oczekiwaniami). Czy jest coś, co da mi wszystkie wybrane?

Jest to formularz internetowy.

Odpowiedz

50

Możesz użyć ListBox.GetSelectedIndices method i zapętlić wyniki, a następnie uzyskać dostęp do każdego z nich poprzez kolekcję przedmiotów. Ewentualnie możesz przejrzeć wszystkie elementy i sprawdzić ich Selected property.

// 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

Dzięki. Pracowałem z drugim rozwiązaniem, które dałeś. –

+0

Brak prob! Dodałem kod, aby pokazać różne podejścia. Kolekcja Items musi zostać przesłana, jeśli zdecydujesz się użyć LINQ. –

+1

Zasady LAMQ lamba. Dzięki za pomoc. –

3

użycie GetSelectedIndices metoda listbox

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

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

wypróbować ten kod stworzony przy użyciu VB.NET:

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 

Mam nadzieję, że to pomaga.