2012-12-04 42 views
6

Để tìm một mục (và chọn nó) trong một DropDownList sử dụng một giá trị, chúng tôi chỉ đơn giản là làmmục DropDownList tìm thấy bằng giá trị một phần

dropdownlist1.Items.FindByValue("myValue").Selected = true; 

Làm thế nào tôi có thể tìm thấy một mục sử dụng giá trị một phần? Giả sử tôi có 3 phần tử và chúng có giá trị "myValue one", "myvalue two", "myValue three" tương ứng. Tôi muốn làm điều gì đó như

dropdownlist1.Items.FindByValue("three").Selected = true; 

và chọn mục cuối cùng.

+0

Tôi có thể tìm DropDownList? hoặc loại "bộ sưu tập" là gì? –

Trả lời

12

Bạn có thể lặp lại từ phần cuối của danh sách và kiểm tra nếu giá trị chứa mục (điều này sẽ chọn mục cuối cùng có chứa giá trị "myValueSearched").

for (int i = DropDownList1.Items.Count - 1; i >= 0 ; i--) 
     { 
      if (DropDownList1.Items[i].Value.Contains("myValueSearched")) 
      { 
       DropDownList1.Items[i].Selected = true; 
       break; 
      } 
     } 

Hoặc bạn có thể sử dụng LINQ như mọi khi:

DropDownList1.Items.Cast<ListItem>() 
        .Where(x => x.Value.Contains("three")) 
        .LastOrDefault().Selected = true; 
+0

Oooh Tôi yêu linq. Cảm ơn bạn. – Lukas

+0

tôi có nhiều trình đơn thả xuống như vậy trong trang của tôi nói 20 và mỗi trình đơn thả xuống phải lặp qua 3000 bản ghi để tìm giá trị một phần phù hợp với tập dữ liệu column.so bằng cách tiếp cận này tôi đoán nó sẽ đạt hiệu suất rất nhiều. xin vui lòng đề nghị bất kỳ cách tốt nhất nếu bạn có ý tưởng – clarifier

1

Bạn có thể lặp lại các mục trong danh sách của mình và khi bạn tìm thấy mục đầu tiên có chuỗi của mục chứa mẫu, bạn có thể đặt thuộc tính Đã chọn thành true.

bool found = false; 
int i = 0; 
while (!found && i<dropdownlist1.Items.Count) 
{ 
     if (dropdownlist1.Items.ToString().Contains("three")) 
       found = true; 
     else 
       i++; 
} 
if(found) 
    dropdownlist1.Items[i].Selected = true; 

Hoặc bạn có thể viết một phương pháp (hoặc phương pháp khuyến nông) mà thực hiện điều này cho bạn

public bool SelectByPartOfTheValue(typeOfTheItem[] items, string part) 
{ 
    bool found = false; 
    bool retVal = false; 
    int i = 0; 
    while (!found && i<dropdownlist1.Items.Count) 
    { 
      if (items.ToString().Contains("three")) 
        found = true; 
      else 
        i++; 
    } 
    if(found) 
    { 
      items[i].Selected = true; 
      retVal = true; 
    } 
    return retVal; 
} 

và gọi nó như thế này

if(SelectByPartOfTheValue(dropdownlist1.Items, "three") 
    MessageBox.Show("Succesfully selected"); 
else 
    MessageBox.Show("There is no item that contains three"); 
1

Trên nêu câu trả lời là hoàn hảo, chỉ cần không có trường hợp nhạy cảm bằng chứng:

DDL.SelectedValue = DDL.Items.Cast<ListItem>().FirstOrDefault(x => x.Text.ToLower().Contains(matchingItem)).Text 
Các vấn đề liên quan