2013-04-11 81 views
5

Tôi có một ListBox với chế độ chọn nhiều. Trong mã phía sau, tôi muốn thiết lập một số giá trị như được chọn. Các giá trị này có trong một Danh sách các đối tượng địa lý [] có tên 'Tên'.Cách đặt nhiều mục như được chọn trong ListBox?

HTML code:

<asp:ListBox ID="lbto" class="chosen" runat="server" Width="450px" 
Height="20px" SelectionMode="Multiple"> 
    <asp:ListItem>Mandy</asp:ListItem> 
    <asp:ListItem>Amit</asp:ListItem> 
    <asp:ListItem>sundar</asp:ListItem> 
    <asp:ListItem>ragu</asp:ListItem> 
    <asp:ListItem>raju</asp:ListItem> 
</asp:ListBox> 

ListItem [] Tên chứa 'Ragu''raju'. Bây giờ, khi tải trang, Hộp danh sách phải chứa 'ragu''raju' làm giá trị đã chọn.

Trả lời

13

Điều gì về việc đặt Selected -property của ListItem?

var names = new List<string>(new string[] { "ragu", "raju" }); 

foreach (var item in lbto.Items) 
{ 
    if (names.Contains(item.Text)) 
     item.Selected = true; 
} 
+0

câu trả lời của bạn là chính xác cho listitem đơn .. – ragu

+0

Bạn có thể đặt nhiều mục thành 'Đã chọn' với phương thức được mô tả ở trên. Đã cập nhật câu trả lời. – Carsten

+0

Nếu 'lbto' chứa 100 mục, nó sẽ kiểm tra toàn bộ 100 mục. nó sẽ mất nhiều thời gian hơn? – ragu

-1

Sử dụng Một dòng của LINQ

lbto.Items.Cast<String>().ForEach(i => i.Selected = names.Contains(i.Text)); 

HOẶC

lbto.Items.OfType<string>().ForEach(i => i.Selected = names.Contains(i.Text)); 
+1

Tôi nhận được một lỗi nói rằng ListItemCollection không có định nghĩa cho 'ForEach' và không có phương pháp mở rộng 'ForEach' –

+0

Nhận xét ở trên là chính xác; có thể thử lbto.Items.OfType () ... –

+1

Giải pháp không hoạt động. \t \t tôi nhận được một thông báo lỗi rằng ListItemCollection không có một định nghĩa cho 'ForEach' và không có phương pháp mở rộng 'ForEach' –

1

Bạn có thể sử dụng phương pháp FindByValue

foreach (string item in stringList) 
    lbxList.Items.FindByValue(item).Selected = true; 
Các vấn đề liên quan