2008-11-24 51 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; 
}