【问题标题】:Select a ListItem from DropDownList using a Linq Query使用 Linq 查询从 DropDownList 中选择 ListItem
【发布时间】:2008-11-24 22:53:28
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我可以用 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;
    

    【讨论】:

      【解决方案2】:

      有人想过:

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

      【讨论】:

      • 太棒了!这正是我的想法!
      【解决方案3】:

      感谢您的建议,它们都有助于我找到可行的解决方案。虽然我同意使用下拉列表本身的方法应该是可行的方法,但我没有与列表中项目的文本完全匹配,因此我需要另一种方法。

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

      linq 查询似乎比我自己遍历列表更可取,而且我在这个过程中学到了一些东西。

      【讨论】:

      • 我有理由在这些情况下使用 FirstOrDefault 以避免下游问题。检查是否为空!
      • 另一个答案供参考,似乎SelectedChecked的含义相同stackoverflow.com/questions/18924147/…
      【解决方案4】:

      我的 vb.net 不稳定,(c# 家伙)但尝试:

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

      我可能有 DirectCast 语法错误,但你知道我来自哪里。问题是在编译时,Items 不能作为 ListItem 的集合进行验证,因为 IEnumerable 的 Current 属性返回 Object。 Items 不是通用集合。

      -奥辛

      【讨论】:

        【解决方案5】:

        使用以下代码选择的简单方法

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多