2

多数のラジオ ボタンを含む ASP テーブルがあります。それらすべてをすばやくループして、checked プロパティを 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 に答える