1

每当我想获得选定的项目时,我必须遍历每个项目并查看它是否被选中。他们甚至有一个 SelectedItem(末尾没有“s”)成员,这对于 CheckBoxList 来说似乎很奇怪。这似乎是一个合乎逻辑的事情,有谁知道他们为什么没有添加它?

4

4 回答 4

4

除了达斯汀的 en drachenstern 的答案。你可以自己滚动:-)

public static IEnumerable<ListItem> SelectedItems(this CheckBoxList cbl)
{
    return cbl.Items.Cast<ListItem>().Where(l=>l.Selected == true);
}
于 2010-09-22T16:42:10.610 回答
4

因为他们不是在 CheckBoxList 中实现 SelectedItem,而是在 CheckBoxList 继承自的 ListControl 中实现。可以说 CheckBoxList 需要回到源代码,因为它的许多编写方式并不“正确”,但这是一个主观论点。(这是个人咆哮的主题,我刚刚遇到太多 CheckBoxList 做一些迟钝的事情,这很烦人,就是这样。只是不是我想的那样,而且从来没有其他人证实它是也烦他们。)

于 2010-09-22T16:36:01.600 回答
3

我不得不说,因为复选框列表呈现单个 HTML 复选框,这些复选框不像单选按钮那样可分组,因此需要逐项评估所选属性。

它是文档的一部分。另请注意,SelectedIndex将返回索引最低的项目。

CheckBoxList 控件提供了一个可以通过数据绑定动态生成的多选复选框组。它包含一个 Items 集合,其中的成员对应于列表中的各个项目。要确定检查了哪些项目,请遍历集合并测试列表中每个项目的 Selected 属性。

于 2010-09-22T16:39:14.670 回答
1

将 CheckBoxList 子类化并自己实现此功能也相当容易,然后您可以重复使用这些功能。

public class ExtendedCheckBoxList : CheckBoxList
{
    public List<string> SelectedItems
    {
        get
        {
            return (from ListItem item in Items
                    where item.Selected
                    select item.Value).ToList();
        }
    }
}
于 2010-09-22T16:43:50.307 回答