【发布时间】:2010-09-22 16:29:05
【问题描述】:
每当我想获得选定的项目时,我都必须遍历每个项目并查看它是否被选中。他们甚至有一个 SelectedItem(末尾没有“s”)成员,这对于 CheckBoxList 来说似乎很奇怪。这似乎是一个合乎逻辑的东西,有谁知道他们为什么没有添加它?
【问题讨论】:
每当我想获得选定的项目时,我都必须遍历每个项目并查看它是否被选中。他们甚至有一个 SelectedItem(末尾没有“s”)成员,这对于 CheckBoxList 来说似乎很奇怪。这似乎是一个合乎逻辑的东西,有谁知道他们为什么没有添加它?
【问题讨论】:
因为他们没有在 CheckBoxList 中实现 SelectedItem,而是在 CheckBoxList 继承自的 ListControl 中实现。可以说 CheckBoxList 需要回到源代码,因为它的许多编写方式并不“正确”,但这是一个主观论点。 (这是个人咆哮的主题,我刚刚遇到太多 CheckBoxList 做一些迟钝的事情,这很烦人,仅此而已。只是我的思维方式不是我想的,而且从来没有其他人证实它是对他们来说也很烦人。)
【讨论】:
除了达斯汀的 en drachenstern 的答案。你可以自己滚动:-)
public static IEnumerable<ListItem> SelectedItems(this CheckBoxList cbl)
{
return cbl.Items.Cast<ListItem>().Where(l=>l.Selected == true);
}
【讨论】:
我不得不说,因为复选框列表呈现单个 HTML 复选框,这些复选框不像单选按钮那样可分组,因此需要逐项评估 selected 属性。
它是documentation 的一部分。另请注意,SelectedIndex 将返回带有lowest index 的项目。
CheckBoxList 控件提供了一个 多选复选框组 可以用数据动态生成 捆绑。它包含一个项目 与成员对应的集合 到列表中的单个项目。到 确定检查哪些项目, 遍历集合并 测试每个的 Selected 属性 列表中的项目。
【讨论】:
将 CheckBoxList 子类化并自己实现此功能也相当容易,然后您可以重复使用。
public class ExtendedCheckBoxList : CheckBoxList
{
public List<string> SelectedItems
{
get
{
return (from ListItem item in Items
where item.Selected
select item.Value).ToList();
}
}
}
【讨论】: