如何循环遍历复选框列表并查找哪些被选中和未选中?

21
我正在尝试遍历复选框列表中的项目。如果被勾选,我想设置一个值。否则,我想设置另一个值。我曾尝试使用下面这个代码,但它只会给我打勾的项目:
foreach (DataRowView myRow in clbIncludes.CheckedItems)
{
    MarkVehicle(myRow);
}

6
asp316: WebForms 还是 WinForms?(它们各自的 CheckBoxList 控件周围的 API 相当不同。) - John Rudy
6个回答

32
这将提供一个已选项目列表。
List<ListItem> items =  checkboxlist.Items.Cast<ListItem>().Where(n => n.Selected).ToList();

这将给出所选框的值的列表(如果需要文本,请将Value更改为Text):

var values =  checkboxlist.Items.Cast<ListItem>().Where(n => n.Selected).Select(n => n.Value ).ToList()

1
我对它们两个都出现了错误。对于第一个解决方案,我得到了错误“无法隐式转换类型'System.Collections.Generic.List<System.Web.UI.WebControls.ListItem>'为'System.Web.UI.WebControls.ListItem'”,对于第二个解决方案,在运行时我得到了错误“当前上下文中不存在名称'values'”。 - Interstellar

28
for (int i = 0; i < clbIncludes.Items.Count; i++)
  if (clbIncludes.GetItemChecked(i))
    // Do selected stuff
  else
    // Do unselected stuff
如果检查处于不确定状态,这仍将返回true。你可能需要替换。
if (clbIncludes.GetItemChecked(i))

使用

if (clbIncludes.GetItemCheckState(i) == CheckState.Checked)

如果您只想包括实际选中的项目。


1
使用这个方法非常好。我该如何获取选中复选框的值/值成员? - Bill Martin
1
clbIncludes.GetItemChecked(i) 不是一个有效的方法,但我只需将其替换为 clbIncludes.Items[i].Selected。 - Eric Barr

23

尝试像这样:

foreach (ListItem listItem in clbIncludes.Items)
{
    if (listItem.Selected) { 
        //do some work 
    }
    else { 
        //do something else 
    }
}

1
这是Winform。所以,当我尝试引用listitem时,它想要引用web控件。我尝试使用listviewitem并得到错误“无法将类型为'System.Data.DataRowView'的对象强制转换为类型'System.Windows.Forms.ListViewItem'”。你有什么想法? - Bill Martin
如果是WinForm,那么请删除标签上的".net"。我花了一些时间试图弄清楚为什么你的解决方案在使用.NET时对我无效,后来才意识到GetItemChecked方法只适用于WinForms。 - Doreen

2
我认为最好的方法是使用 CheckedItems
 foreach (DataRowView objDataRowView in CheckBoxList.CheckedItems)
 {
     // use objDataRowView as you wish                
 }

我没有找到 CheckBoxList 的 CheckedItems 属性。 - Si8

1

使用循环检查每个索引中的comboxlist.Items[i]

bool CheckedOrUnchecked= comboxlist.CheckedItems.Contains(comboxlist.Items[0]);

我认为这可以解决你的问题。


0
使用 CheckBoxList 的 GetItemChecked 或 GetItemCheckState 方法,通过其索引查找一个项目是否被选中。

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