如何循环遍历在页面加载时动态创建的控件

时间:2012-08-30 11:53:22

标签: c# asp.net loops dynamic-controls

我在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.Count作为2返回,tblDynamicRecPatrn.Controls[i].GetType()是表格和文字。

我在代码中将tblDynamicRecPatrn替换为pnlRecPatrn,并将计数设为3,其中2个为文字,1个为表格。

相反,如果我循环为foreach (Control control in Controls),我可以找到动态控件

任何人都可以帮我理清为什么我无法找到动态创建的控件。

1 个答案:

答案 0 :(得分: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();