2008-11-24 61 views
4

我試圖使用Linq查詢在下拉列表控件中查找和設置選定的值。使用Linq查詢從DropDownList中選擇一個ListItem

Dim qry = From i In ddlOutcome.Items _ 
      Where i.Text.Contains(value) 


Dim selectedItem As ListItem = qry.First 

ddlOutcome.SelectedValue = selectedItem.Value 

即使文檔說DropDownList.Items收集實現IEnumerable我得到一個錯誤的地方,備選方案嚴格On不允許後期綁定條款!

回答

2

謝謝你的建議,他們都能幫助我找到可行的解決方案。雖然我同意使用下拉列表本身的方法應該是一條路,但我沒有完全匹配列表中的項目的文本,所以我需要另一種方法。

Dim qry = From i In ddlOutcome.Items.Cast(Of ListItem)() _ 
       Where i.Text.Contains(value) 

    qry.First().Selected = True 

linq查詢似乎更喜歡自己迭代列表,我在過程中學到了一些東西。

+0

我有理由使用FirstOrDefault在這些情況下,以避免下游問題。檢查null! – Allen 2015-10-31 10:43:05

+0

另一個可供參考的答案,看起來`Selected`與`Checked`具有相同的含義https://stackoverflow.com/questions/18924147/how-to-get-values-of-selected-items-in-checkboxlist-with- foreach-in-asp-net-c – 2017-06-13 15:52:53

1

我vb.net是搖搖欲墜,(C#的傢伙),但嘗試:

Dim qry = From DirectCast(i, ListItem) In ddlOutcome.Items ... 

我可能有DirectCast語法錯誤,但你知道我來自哪裏。問題是在編譯時,Items無法驗證爲ListItem的集合,因爲IEnumerable的Current屬性返回Object。項目不是通用集合。

-Oisin

8

我可以在C#中給你一個答案,我希望它可以幫助你。

它使用下拉列表的方法,最簡單的方法,比LINQ查詢好:

DropDownList1.SelectedIndex = 
     DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("2")); 

如果你想在LINQ查詢這將是這樣的:

var selected=from i in DropDownList1.Items.Cast<ListItem>() 
        where ((ListItem)i).Text.Contains("2") select i; 

DropDownList1.SelectedValue = selected.ToList()[0].Text; 
0

簡單的方式來選擇使用下面的代碼

foreach (ListItem i in DropDownList1.Items) 
    { 
     DropDownList1.SelectedValue = i.Value; 
    if (DropDownList1.SelectedItem.Text=="text of your DropDownList") 
     { 
     break; 
     } 
    } 
5

任何人都想過:

foreach (ListItem li in drp.Items.Cast<ListItem>().Where(li => li.Value == "")) 
{ 
    li.Selected = true; 
}