2012-12-04 31 views
6

發現要找到一個項目(並選擇它)使用值的下拉列表,我們根本就下拉列表項的部分值

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

我如何才能找到使用部分價值的項目?假設我有3個元素,它們分別具有值「myValue one」,「myvalue two」,「myValue three」。我想做點像

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

並讓它選擇最後一項。

+0

在哪裏可以找到下拉列表?或「項目」是什麼類型的集合? –

回答

12

您可以從的結束迭代列表並檢查值是否包含該項目(這將選擇包含值「myValueSearched」)的最後一個項目。

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

或者你可以使用LINQ一如既往:

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

Oooh我愛linq。謝謝。 – Lukas

+0

我的頁面上有很多這樣的下拉菜單,比如說20,每個下拉菜單都需要遍歷3000條記錄才能找到與數據集列匹配的部分值。通過這種方法,我猜它會達到很高的性能。如果你有想法,請提出任何最好的方法 – clarifier

1

您可以迭代列表中的項目,並且當您找到第一個項目的字符串包含模式的項目時,可以將其Selected屬性設置爲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; 

或者你可以寫一個方法(或擴展方法),這是否對你

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; 
} 

,並調用它

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

上面提到的答案是完美的,只是有不區分大小寫證明:

DDL.SelectedValue = DDL.Items.Cast<ListItem>().FirstOrDefault(x => x.Text.ToLower().Contains(matchingItem)).Text