2013-02-14 87 views
3

之前加一行,谁能向我解释这一点?findcontrol没有找到动态添加的控件,它只是在

CheckBox ckRequest = new CheckBox(); 
ckRequest.ID = "ckRequest"; 
ckRequest.DataBinding += new EventHandler(this.CkIsRequested_DataBinding); 
container.Controls.Add(ckRequest); 
Control con = container.FindControl("ckRequest"); 

调试显示con仍然为空。

调试也表明我,conteiner.Controls长谷一个项目ID为“ckRequest”

这可怎么????


非常感谢您的回答。

其实我尝试以下。 findcontrol does not find dynamically created control in rowUpdating eventhandler 对我来说,findcontrol只适用于创建的页面。

在哪个时间点创建页面的可视化树?

+1

提供了更多的代码?什么是容器? – 2013-02-14 10:54:05

+0

什么类型是容器?它是一个用户控件吗? – 2013-02-14 10:54:20

回答

3

FindControl只有当控制在页面

在你的情况的可视化树的作品,你可以试试这个

var checkBoxesInContainer = container.Controls.OfType<CheckBox>(); 

http://msdn.microsoft.com/en-us/library/bb360913.aspx

+0

System.Web.UI.Control容器 – Ephedra 2013-02-14 11:47:55

+0

谢谢,这对我有意义。 – Ephedra 2013-02-14 12:01:03

1

您可以使用以下方法:

Control con = 
    container.Controls.Cast<Control>().First(item => item.ID == "ckRequest"); 
+0

System.Web.UI.Control容器 – Ephedra 2013-02-14 11:49:23

0

您可能想尝试以下操作:

//GET THE CHECKBOXLIST 
Control c = phCategories.Controls.Cast<Control>().First(item => item.ID == "cblCatID-" + catID && item.GetType().Name == "CheckBoxList"); 
if (c.GetType().Name == "CheckBoxList") 
{ 
    cbl = (CheckBoxList)c; 
} 

由于某种原因,我需要先把它作为控件。如果我没有这样做,我似乎会抓住一个标签(这对我来说没有意义,因为它实际上并没有抓住标签)。希望它有助于某人。