【问题标题】:Find All Radio Buttons in ASP Table查找 ASP 表中的所有单选按钮
【发布时间】:2013-09-25 03:06:13
【问题描述】:

我有一个包含大量单选按钮的 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;
}

【问题讨论】:

  • 没有行的表?看看MSDN你如何使用表格控件或使用Panel或像Repeater这样的数据绑定网络控件。
  • 对不起,我刚刚为帖子修剪了太多,我放回了更多代码。

标签: c# asp.net for-loop foreach controls


【解决方案1】:

据我所知,表格的控件集合不包含所有行单元格中的所有控件。 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;

【讨论】:

    【解决方案2】:

    你需要遍历表格控件的层,像这样:

    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;
    }
    

    【讨论】:

    • Linq 版本很容易实现,我不太确定我是否理解 .SelectMany (tr => tr.Controls
    • @JStellato - SelectMany() 旨在将数据扁平化为一个数据集合。例如,假设您的办公桌上有一摞书,并且您想创建一个列表,其中列出了该摞中所有书籍的所有作者。作为一个人,你会得到一张纸,从第一本书开始,在纸上的一个列表中写下这本书的作者;这实际上是 SelectMany() 在 LINQ 中所做的。
    • @JStellato - 如果您只使用Select(),那么您将获得每本书的单一作者列表,然后必须一起编译该列表;为每本书考虑一张单独的纸。现在使用 x 张纸,您需要浏览每张纸以建立一个主列表,最终得到一个列表。因此,SelectMany() 不是构建列表列表,而是让我们直接获得所需的单个数据输出列表。
    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2010-12-23
    相关资源
    最近更新 更多