【问题标题】:Is there an ASP.NET collection for selected items in ListBox?ListBox 中的选定项目是否有 ASP.NET 集合?
【发布时间】:2009-08-26 18:40:33
【问题描述】:

在我的 Asp.NET 网站上,我有一个允许多项选择的列表框。我希望能够问这样的问题:

blah = myListbox.selectedItems;

并获得在列表框中选择的项目的集合。看起来在 Windows 窗体世界中有一种方法,但对于 asp.NET 没有。有没有比遍历 Items 集合寻找选定值更简单的方法?

【问题讨论】:

    标签: asp.net listbox


    【解决方案1】:

    这样的事情应该会让你选择项目:

        List<ListItem> selectedItems = new List<ListItem>();
        int[] selectedItemsIndexes = myListbox.GetSelectedIndices();
        foreach (int selectedItem in selectedItemsIndexes)
        {
            selectedItems.Add(myListbox.Items[selectedItem]);
        }
    

    作为扩展方法:

    public static class ListBoxExtensions
    {
    
        public static List<ListItem> GetSelectedItems(this ListBox listbox)
        {
            List<ListItem> selectedItems = new List<ListItem>();
            int[] selectedItemsIndexes = listbox.GetSelectedIndices();
            foreach (int selectedItem in selectedItemsIndexes)
            {
                selectedItems.Add(listbox.Items[selectedItem]);
            }
            return selectedItems;
        }
    }
    

    所以现在你可以打电话了:

    List<ListItem> selectedItems = myListBox.GetSelectedItems();
    

    正如 olle 所建议的,扩展方法可以是 Linq-ified 并因此进一步缩小到:

    public static class ListBoxExtensions
    {
    
        public static IEnumerable<ListItem> GetSelectedItems(this ListBox listbox)
        {
            var selectedItems = from ListItem i in myListbox.Items where i.Selected select i
            return selectedItems;
        }
    }
    

    【讨论】:

    • 是的 - 它遍历集合,但据我所知,没有更好的方法
    【解决方案2】:

    您似乎无法直接获得这些物品,但GetSelectedIndices 可能会有所帮助。

    【讨论】:

      【解决方案3】:

      没有这样的属性,但简单的 linq 查询可以让您快速轻松地获得结果。

      var selectedItems = from ListItem i in myListbox.Items where i.Selected select i; 
      

      如果你需要做这种事情,使用扩展方法可以让它变得更简单。

      【讨论】:

      • 至少在我的电脑上(可能是个怪癖——安装和卸载的 CTP 比我吃过的热饭还多!),我需要为 i 指定类型:var selectedItems = from ListItem i in myListbox.Items where i.Selected select i;
      • 啊不,你是绝对正确的。感谢您指出了这一点。我想我不仅不应该提交编译过的代码,也不应该回答它。将答案更新为正确。
      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多