2009-10-18 34 views
17

Tôi có một ListBox ASP có SetMode được đặt thành "Nhiều". Có cách nào để truy xuất lại TẤT CẢ các phần tử đã chọn và không chỉ là yếu tố cuối cùng?Lấy tất cả các giá trị được chọn từ một ListBox ASP

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

Sử dụng lstCart.SelectedIndex chỉ trả về phần tử cuối cùng (như mong đợi). Có cái gì đó sẽ cho tôi tất cả được lựa chọn?

Đây là biểu mẫu web.

Trả lời

50

Bạn có thể sử dụng ListBox.GetSelectedIndices method và lặp lại kết quả, sau đó truy cập từng mục qua bộ sưu tập các mục. Cách khác, bạn có thể lặp qua tất cả các mục và kiểm tra Selected property của chúng.

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

Cảm ơn. Tôi đã làm việc với giải pháp thứ 2 mà bạn đưa ra. –

+0

Không có prob! Tôi đã thêm mã để hiển thị các cách tiếp cận khác nhau. Bộ sưu tập Items cần phải được cast nếu bạn quyết định sử dụng LINQ. –

+1

Quy tắc LINQ lamba. Cảm ơn đã giúp đỡ. –

3

sử dụng GetSelectedIndices phương pháp listbox

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

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

thử sử dụng mã này, tôi tạo ra sử dụng 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 

Tôi hy vọng nó giúp.

Các vấn đề liên quan