我有这段代码:
foreach (MyObject object in MyObject)
{
Literal checkBoxStart = new Literal();
Literal checkBoxEnd = new Literal();
checkBoxStart.Text = "<div class=\"item\">";
checkBoxEnd.Text = "</div>";
CheckBox chb = new CheckBox();
chb.InputAttributes.Add("value", object.UniqueID);
chb.Text = object.Title;
panelLocalita.Controls.Add(checkBoxStart);
panelLocalita.Controls.Add(chb);
panelLocalita.Controls.Add(checkBoxEnd);
}
,而不是cmdSend_Click(object sender, EventArgs e)
方法,我想浏览该面板,并仅检查Checkbox
s。我该怎么办?
答案 0 :(得分:3)
假设我理解您的浏览意思,您可以执行以下操作:
foreach (CheckBox chb in panelLocalita.Controls.OfType<CheckBox>())
{
}
您必须使用System.Linq才能使其正常工作。
答案 1 :(得分:1)
您可以深入了解Linq工具箱。有一些方法适用于IEnumerable,因为ControlsCollection实现了该接口,您可以直接在集合上使用它们。其中一种方法非常适合您的需求。
扩展方法OfType<TResult>()
将迭代集合,并仅返回所提供类型的元素。
获取您可以执行的所有复选框,如下所示:
var checkboxes = panelLocalita.Controls.OfType<CheckBox>();
然后你可以通过foreach迭代,如果你想要副作用,比如设置所有选中
foreach(var checkBox in checkboxes)
{
checkBox.Checked = true;
}
或者如果您需要从中获取信息,您可以使用Linq工具箱中的更多工具,例如,如果您只想抓取那些经过检查的工具:
checkboxes.Where(c=>c.Checked)
或检查是否已全部检查
checkboxes.All(c=>c.Checked)