如何在面板中浏览(仅)复选框?

时间:2012-03-07 11:34:51

标签: asp.net checkbox webforms panel

我有这段代码:

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。我该怎么办?

2 个答案:

答案 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)