【问题标题】:How to get selected items valus from list box without using for loop如何在不使用 for 循环的情况下从列表框中获取选定项目的值
【发布时间】:2012-05-02 11:19:35
【问题描述】:

我的 aspx 页面中有一个如下列表框

<asp:ListBox ID="ddlCategory" runat="server" SelectionMode="Multiple" Width="200"
></asp:ListBox>

我已将它与类别数据集绑定。一切正常。现在我想从服务器端的这个列表框中获取所有选定的项目。有很多方法可以实现这些。但我不想迭代每个项目。因为列表项有 1000 个类别。

有什么方法可以做到这一点?

【问题讨论】:

  • 您选择的任何方式都会遍历集合以检查每个项目的状态。它怎么知道它找到了所有选定的项目?你想要一段代码让你相信它不会迭代吗?也许是这样的:ddlCategory.Items.Where(item =&gt; item.Selected);

标签: asp.net listbox


【解决方案1】:

你可以这样实现

var selectedItems = from li in ddlCategory.Items.Cast<ListItem>()
                    where li.Selected == true
                    select li;

在这里查看另一种实现方式

http://frazsundal.blogspot.com/2012/05/fetch-aspnet-listbox-control-selected.html

【讨论】:

  • 这实际上是 Linq,而不是 lambda... Lambda 看起来像这样:o => o.Id == 1
  • 改变了我的措辞,但这并没有停止实现它的结果:)
  • 我知道,只是想指出这一点,这样人们就不会学错了 :) 解决方案本身当然是好的。 +1
【解决方案2】:

以下是对您有帮助的示例。

Dim lst As New System.Web.UI.WebControls.ListBox
lst.Items.Add(New ListItem("1", 1))
lst.Items.Add(New ListItem("2", 2))
lst.Items.Add(New ListItem("3", 3))
lst.SelectionMode = ListSelectionMode.Multiple
lst.Items(0).Selected = True
lst.Items(2).Selected = True
Dim selectedItems As List(Of ListItem) = (From li In lst.Items.Cast(Of ListItem)() Where li.Selected = True Select li).ToList

【讨论】:

    【解决方案3】:

    可以获取选中项的所有索引:

            int [] indexes= ListBox1.GetSelectedIndices();
            for (int i = 0; i < indexes.Length; i++)
            {
                // ListBox1.Items[i]  ;
            }
    

    【讨论】:

      猜你喜欢
      • 2015-10-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      相关资源
      最近更新 更多