2010-08-27 14 views
13

Tôi có một thả xuống ASP.NET mà tôi đã điền thông qua databinding. Tôi có văn bản khớp với văn bản hiển thị cho danh sách tôi muốn được chọn. Tôi rõ ràng không thể sử dụng SelectedText (getter chỉ) và tôi không biết chỉ mục, vì vậy tôi không thể sử dụng SelectedIndex. Tôi hiện đang chọn mục bằng cách duyệt qua toàn bộ danh sách, như hiển thị dưới đây:Làm thế nào bạn có thể thiết lập mục đã chọn trong danh sách thả xuống ASP.NET thông qua văn bản hiển thị?

ASP:

<asp:DropDownList ID="ddItems" runat="server" /> 

Code:

ddItems.DataSource = myItemCollection; 
ddItems.DataTextField = "Name"; 
ddItems.DataValueField = "Id"; 

foreach (ListItem item in ddItems.Items) 
{ 
    if (item.Text == textToSelect) 
    { 
     item.Selected = true; 
    } 
} 

Có cách nào để làm điều này mà không cần lặp qua tất cả các mặt hàng?

+0

Đây có thể là một/câu hỏi ngu ngốc đơn giản nhưng tôi khá mới đối với các biểu mẫu web ASP. –

+2

chắc chắn không đơn giản hoặc ngu ngốc. @ kbrimington có câu trả lời đúng cho bạn. –

Trả lời

39

Bạn có thể thử:

ddItems.Items.FindByText("Hello, World!").Selected = true; 

Hoặc:

ddItems.SelectedValue = ddItems.Items.FindByText("Hello, World!").Value; 

Lưu ý rằng, nếu bạn không chắc chắn rằng một mục tồn tại phù hợp với văn bản hiển thị của bạn, bạn có thể cần phải kiểm tra kết quả của FindByText() cho null.

Lưu ý rằng tôi sử dụng phương pháp đầu tiên trên danh sách chọn nhiều, chẳng hạn như CheckBoxList để thêm lựa chọn bổ sung. Tôi sử dụng cách tiếp cận thứ hai để ghi đè tất cả các lựa chọn.

+1

bạn đánh tôi với nó. Tôi sử dụng tùy chọn đầu tiên. –

+1

kiểm tra tham chiếu null nên được sử dụng trên một trong các tùy chọn đó. Bạn không thể đảm bảo văn bản sẽ ở đó. –

+0

@rock: Cảm ơn phản hồi của bạn. Tôi đã thêm một ghi chú giải thích khi tôi chọn một cái khác. – kbrimington

1

Sử dụng FindByText phương pháp của lớp ListItemCollection, chẳng hạn như:

ListItem itemToSelect = ddlItems.Items.FindByText("some text to match"); 

if(itemToSelect != null) 
{ 
    itemToSelect.Selected = true; 
} 
-1

của nó làm việc tốt ..

drplistcountry.SelectedIndex = 
drplistcountry.Items.IndexOf(drplistcountry.Items.FindByText("--Select--")); 

Hoặc

drplistcountry.ClearSelection(); 
drplistcountry.SelectedIndex = 
drplistcountry.Items.IndexOf(drplistcountry.Items.FindByText("--Select--")); 
Các vấn đề liên quan