1

aspパネル内にあるaspテーブル内にコントロールを動的に作成しました。

tblDynamicRecPatrnはaspテーブルで、pnlRecPatrnはパネルです。asp テーブルはパネル内にあり、テーブル内は動的に作成されたコントロールです。

コントロールをループするために次のコードを実行しましたが、動的に作成されたコントロールが見つかりません。

for (int i = 0; i < tblDynamicRecPatrn.Controls.Count; i++)
{
    if (tblDynamicRecPatrn.Controls[i].GetType() == typeof(RadioButton))
    {
        RadioButton rb = new RadioButton();
        rb = (RadioButton)tblDynamicRecPatrn.Controls[i];
    }
}

上記のコードはtblDynamicRecPatrn.Controls.Count2 を返し、これtblDynamicRecPatrn.Controls[i].GetType()はテーブルとリテラルでした。

tblDynamicRecPatrnコードをに置き換えpnlRecPatrnたところ、カウントが 3 になり、そのうちの 2 つがリテラル、1 つがテーブルになりました。

foreach (Control control in Controls)代わりに、動的コントロールを見つけることができるよりもループする場合

動的に作成されたコントロールを見つけることができない理由を誰かが理解するのを手伝ってくれますか?

4

1 に答える 1

0

コントロールを再帰的にループする必要があると思います

Func<System.Web.UI.ControlCollection, IEnumerable<System.Web.UI.Control>> FlattenControls = null;
FlattenControls = coll => coll.Cast<System.Web.UI.Control>()
                            .Concat(coll.Cast<System.Web.UI.Control>()
                                        .SelectMany(x => FlattenControls(x.Controls))
                            );


var radioButtons = FlattenControls(this.Controls).OfType<RadioButton>().ToList();
于 2012-08-30T12:08:05.997 に答える