ASP.NET中ListBox选定项的集合是否存在?

4

在我的 Asp.NET 网站上,我有一个允许多选的列表框。我希望能够询问类似以下的问题:

blah = myListbox.selectedItems;

需要从列表框中选定的项目集合,看起来在Windows Forms世界中有一种方法可以做到这一点,但是在asp.NET中没有。有没有比仅遍历项目集合寻找所选值更简单的方法?

4个回答

9

以下代码可以获取选中的项目:

    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化,从而进一步缩小:

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

而且是的 - 它在集合上进行迭代,但据我所知没有更好的方法。 - Rob

1

没有这样的属性,但是一个简单的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; - Rob
啊,你说得完全正确。感谢指出这一点。我想我不仅不应该提交已编译的代码,而且也不应该用它来回答问题。已更新答案以确保正确性。 - olle

1

看起来你不能直接获取这些项目,但是GetSelectedIndices可能会有所帮助。



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