5

谁能给我解释一下?

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 在 rowUpdating 事件处理程序中找不到动态创建的控件 这对我来说很有意义,findcontrol 仅适用于创建的页面。

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

4

3 回答 3

3

FindControl仅当控件位于页面的可视化树中时才有效

在你的情况下,你可以试试这个

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

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

于 2013-02-14T10:57:18.200 回答
2

您可以使用以下内容:

Control con = 
    container.Controls.Cast<Control>().First(item => item.ID == "ckRequest");
于 2013-02-14T11:22:45.230 回答
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;
}

出于某种原因,我需要先将其转换为控件。如果我不这样做,我似乎反而抓住了一个标签(这对我来说没有意义,因为它实际上并没有抓住一个标签)。希望它可以帮助某人。

于 2015-01-27T02:07:56.803 回答