从asp.net ListBox中获取所有选定的项

14

有没有一种流畅的方式,可以使用扩展方法获取列表框控件中所有所选项?

请不要争论如何获取这样的列表是无关紧要的,因为最终一切都使用循环来迭代项目并找到所选的项目

3个回答

29
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);
    }
}

7

扩展方法:

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

不确定哪个会表现更好 OfType 还是 Cast (我的直觉是 Cast)。

编辑 基于 Ruben 的反馈,为通用的 ListControl 方法进行编辑,这将使它成为一个非常有用的扩展方法:

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

你也可以将 ListBox 替换为 ListControl,这样你的扩展就能适用于所有列表控件,如 DropDownListCheckBoxListRadioButtonList 等等。 - Rubens Farias
好主意..我会调整我的答案以反映这一点。 - Kelsey
“Cast” 速度稍快,但可能会导致 “InvalidCastException”;看起来这里适用 Cast,因为 “Items.Add” 只接收 ListItem 对象。 - Rubens Farias

1

你好,我已经使用VB.NET为这个问题创建了一个解决方案:

从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()似乎可以解决问题。 - DJDave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接