使用Linq查询从DropDownList中选择ListItem

时间:2008-11-24 22:53:29

标签: asp.net drop-down-menu linq-to-objects

我尝试使用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不允许后期绑定!

5 个答案:

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