2

我有一个包含大量单选按钮的 ASP 表。我想快速遍历它们并将选中的属性设置为 false:

   <asp:Table runat=Server ID=tblSchedule>
            <asp:TableRow>
                <asp:TableCell>
    <asp:RadioButton runat=Server ID=rdb1/>
</asp:TableCell>
</asp:TableRow>
</asp:table>

但是,以下代码从不返回任何结果。

foreach (RadioButton rdb in tblSchedule.Controls.OfType<RadioButton>())
{
    rdb.Checked = false;
}
4

2 回答 2

1

您需要遍历表格控件的层,如下所示:

foreach (var tr in tblSchedule.Controls.OfType<TableRow>())
{
    foreach (var td in tr.Controls.OfType<TableCell>())
    {
        foreach (var rdb in td.Controls.OfType<RadioButton>())
        {
            rdb.Checked = false;
        }
    }
}

或者,您也可以使用 LINQ,如下所示:

foreach (var rdb in tblSchedule.Controls.OfType<TableRow>()
    .SelectMany(tr => tr.Controls.OfType<TableCell>()
    .SelectMany(td => td.Controls.OfType<RadioButton>())))
{
    rdb.Checked = false;
}
于 2013-09-19T21:11:50.413 回答
0

据我记得,表格的控件集合不包含所有行单元格中的所有控件。Controls.OfType不在子控件中递归搜索。所以你要么必须使用递归方法,要么只使用Rows属性和这个 linq 查询:

IEnumerale<RadioButton> allRadios = this.tblSchedule.Rows.Cast<TableRow>()
     .SelectMany(r => r.Cells.Cast<TableCell>()
                       .SelectMany(c => c.Controls.OfType<RadioButton>()));

foreach(RadioButton rBtn in allRadios)
    rBtn.Checked = false;
于 2013-09-19T21:08:36.490 回答