【问题标题】:Get all selected items from asp.net ListBox从 asp.net ListBox 中获取所有选定的项目
【发布时间】:2009-12-02 00:28:44
【问题描述】:

任何人都知道使用扩展方法在列表框控件中获取所有选定项的平滑方法吗?

并且,请不要让我争论 它与如何获得这样一个列表无关,因为最后一切都使用循环来迭代项目并找到选定的项目

【问题讨论】:

    标签: asp.net listbox


    【解决方案1】:
    var selected = yourListBox.Items.GetSelectedItems();
    //var selected = yourDropDownList.Items.GetSelectedItems();
    //var selected = yourCheckBoxList.Items.GetSelectedItems();
    //var selected = yourRadioButtonList.Items.GetSelectedItems();
    
    public static class Extensions
    {
        public static IEnumerable<ListItem> GetSelectedItems(
               this ListItemCollection items)
        {
            return items.OfType<ListItem>().Where(item => item.Selected);
        }
    }
    

    【讨论】:

      【解决方案2】:

      扩展方法:

      public static List<ListItem> GetSelectedItems(this ListBox lst)
      {
          return lst.Items.OfType<ListItem>().Where(i => i.Selected).ToList();
      }
      

      你可以在你的列表框上调用它:

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

      您还可以在列表框项目上使用“Cast”进行转换,例如:

      return lst.Items.Cast<ListItem>().Where(i => i.Selected).ToList();
      

      不确定OfTypeCast 哪个性能更好(我的直觉是Cast)。

      编辑基于 Ruben 对通用 ListControl 方法的反馈,这确实会使其更有用的扩展方法:

      public static List<ListItem> GetSelectedItems(this ListControl lst)
      {
          return lst.Items.OfType<ListItem>().Where(i => i.Selected).ToList();
      }
      

      【讨论】:

      • 您也可以将ListBox 替换为ListControl,这样您的扩展程序适用于所有列表控件,如DropDownListCheckBoxListRadioButtonList
      • 好主意.. 将调整我的答案以反映这一点。
      • Cast 有点快,但可以导致InvalidCastException;似乎 Cast 在这里适用,因为 Items.Add 只接收 ListItem 对象
      【解决方案3】:

      您好,我在这篇文章中使用 VB.NET 为这个问题创建了一个解决方案:

      Getting all selected values from an ASP ListBox

      下面这段代码和上面的链接是一样的:

      Public Shared Function getSelectedValuesFromListBox(ByVal objListBox As ListBox) As String
      Dim listOfIndices As List(Of Integer) = objListBox.GetSelectedIndices().ToList()
      Dim values As String = String.Empty
      
      For Each indice As Integer In listOfIndices
          values &= "," & objListBox.Items(indice).Value
      Next indice
      If Not String.IsNullOrEmpty(values) Then
          values = values.Substring(1)
      End If
      Return values
      End Function
      

      希望对你有帮助。

      【讨论】:

      • 您的第一行在 VS2015 中无法为我编译;但是用 Dim listOfIndices() As Integer = objListBox.GetSelectedIndices() 替换它似乎可以解决问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多