2012-08-30 55 views
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.Count爲2和tblDynamicRecPatrn.Controls[i].GetType()是表和文字。

我在代碼中將tblDynamicRecPatrn替換爲pnlRecPatrn,我將計數設置爲3,其中2個作爲字面值,另一個作爲表格。

,而是如果我環路foreach (Control control in Controls)比我能找到的動態控制

誰能幫我整理一下,爲什麼我不能夠找到dynaically創建控件。

+0

任何動態創建的'Page_Init'方法控制應重新創建,才能被添加到控制樹,並在視圖狀態綁定到控制環它。當然,總是使用相同的「ID」。 –

+0

@AndreCalil是的,我知道這一點,也是我可以找到這些控件,如果我做'foreach(控制控制在控制中)'我想知道爲什麼我不能找到它內部面板或內部asp表 – Ishan

+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();