代码之家  ›  专栏  ›  技术社区  ›  Beska

在列表框中是否存在选定项的ASP.NET集合?

  •  4
  • Beska  · 技术社区  · 15 年前

    在我的ASP.NET网站上,我有一个允许多重选择的列表框。我想问一下:

    blah = myListbox.selectedItems;
    

    并获得在列表框中选择的项的集合。在Windows窗体世界中似乎有这样的方法,但不适用于ASP.NET。有没有比迭代items集合查找所选值更简单的方法?

    4 回复  |  直到 15 年前
        1
  •  9
  •   Rob    15 年前

    类似这样的操作将为您提供所选项目:

        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();
    

    正如奥利所建议的,扩展方法可以被简化,Thu可以进一步缩小到:

    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
  •  1
  •   Matthew Jones    15 年前

    看起来你不能直接拿到东西,但是 GetSelectedIndices 可能会有所帮助。

        3
  •  1
  •   olle    15 年前

    没有这样的属性,但是一个简单的LINQ查询可以快速、简单地得到结果。

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

    使用扩展方法,如果需要进行这种分配,您可以使它更简单。