2011-12-12 39 views
9

Tôi đang cố gắng để có được các mục được chọn của một asp: ListBox kiểm soát và đặt chúng trong một chuỗi phân cách bằng dấu phẩy. Phải có cách đơn giản hơn để thực hiện việc này sau đó:ASP: ListBox Nhận các mục đã chọn - Một Liner?

foreach (ListItem listItem in lbAppGroup.Items) 
{ 
    if (listItem.Selected == true) 
    { 
     Trace.Warn("Selected Item", listItem.Value); 
    } 
} 

Có cách nào để làm điều này thành một dòng không? giống như mã giả của tôi ở đây:

string values = myListBox.SelectedItems; 

Tôi đang sử dụng ASP.NET và C# 3.5.

Cảm ơn bạn đã trợ giúp !!

Trả lời

14

Sử dụng LINQ:

string values = String.Join(", ", lbAppGroup.Items.Cast<ListItem>() 
                .Where(i => i.Selected) 
                .Select(i => i.Value)); 
+0

Xin chào, điều này thật tuyệt. Tôi đang cố gắng làm cho nó hoạt động và tôi gặp vấn đề này: 'System.Web.UI.WebControls.ListItemCollection' không chứa định nghĩa cho 'Where' và không có phương thức mở rộng 'Where' chấp nhận đối số đầu tiên của loại ' System.Web.UI.WebControls.ListItemCollection 'có thể được tìm thấy (bạn đang thiếu một chỉ thị bằng cách sử dụng hoặc một tham chiếu lắp ráp?) Tôi có LINQ trong tuyên bố sử dụng của tôi. – Jared

+0

@ user993514 Tôi quên việc truyền đến 'ListItem', hãy thử điều đó. – James

+0

Hoàn hảo LINQ lưu lại ngày. Cám ơn rất nhiều về sự giúp đỡ của bạn. – Jared

4

Tôi không nghĩ rằng có điều gì được xây dựng trong nhưng bạn có thể làm điều gì đó như thế này:

<asp:ListBox runat="server" ID="listBox" SelectionMode="Multiple"> 
    <asp:ListItem Selected="True" Text="text1" Value="value1"></asp:ListItem> 
    <asp:ListItem Selected="false" Text="text2" Value="value2"></asp:ListItem> 
    <asp:ListItem Selected="True" Text="text3" Value="value3"></asp:ListItem> 
    <asp:ListItem Selected="True" Text="text4" Value="value4"></asp:ListItem> 
</asp:ListBox> 

    IEnumerable<string> selectedValues = from item in listBox.Items.Cast<ListItem>() 
              where item.Selected 
              select item.Text; 

     string s = string.Join(",", selectedValues); 
1

Trên thực tế có cái gì đó được xây dựng trong:

ListBox.getSelectedItems

http://msdn.microsoft.com/en-us/library/aa297606(v=vs.60).aspx

+1

Đây có phải là biểu mẫu của Win không? Tôi không thể có vẻ để có được điều đó trong ASP.NET – Jared

+0

Đây là một câu hỏi ASP.NET. –

+0

Vâng, sai lầm của tôi. PC phát triển của tôi không có ở đây nên tôi đã thêm liên kết quá nhanh. Có ListBox.GetSelectedIndices mặc dù. Tôi nghĩ đó là getSelectedItems ... – Pleun

2
var selectedQuery = listBox.Items.Cast<ListItem>().Where(item => item.Selected); 
string selectedItems = String.Join(",", selectedQuery).TrimEnd(); 
+0

'.TrimEnd()' có vẻ dư thừa ở đây. Nếu bạn muốn xóa khoảng trắng khỏi chuỗi, bạn nên IMHO thực hiện thao tác đó trong dòng đầu tiên, trên mỗi mục. –

+0

truy vấn đầu tiên không truy lục chuỗi –

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