我尝试使用Linq查询在下拉列表控件中查找和设置所选值。
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,我在Where子句中得到一个错误,Option Strict ON不允许后期绑定!
答案 0 :(得分:9)
我可以用C#给你答案,我希望它可以帮到你。
使用DropDownlist方法的最简单方法,比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;
答案 1 :(得分:5)
有人想过:
foreach (ListItem li in drp.Items.Cast<ListItem>().Where(li => li.Value == ""))
{
li.Selected = true;
}
答案 2 :(得分:2)
感谢您的建议,他们都有助于我找到一个可行的解决方案。虽然我同意使用下拉列表本身的方法应该是可行的方法,但我没有与列表中项目的文本完全匹配,所以我需要另一种方式。
Dim qry = From i In ddlOutcome.Items.Cast(Of ListItem)() _
Where i.Text.Contains(value)
qry.First().Selected = True
linq查询似乎更适合自己遍历列表,我在这个过程中学到了一些东西。
答案 3 :(得分:1)
我的vb.net很不稳定,(c#guy)但请尝试:
Dim qry = From DirectCast(i, ListItem) In ddlOutcome.Items ...
我可能有错误的DirectCast语法,但你知道我来自哪里。问题是在编译时,Items不能像ListItem的集合那样验证,因为IEnumerable的Current属性返回Object。物品不是通用的集合。
-Oisin
答案 4 :(得分:0)
使用以下代码选择的简单方法
foreach (ListItem i in DropDownList1.Items)
{
DropDownList1.SelectedValue = i.Value;
if (DropDownList1.SelectedItem.Text=="text of your DropDownList")
{
break;
}
}