我有这样的代码
protected void Button1_Click(object sender, EventArgs e)
{
Table t = new Table() ;
t.ID = "T1";
t.Visible = true;
MyPanel.Controls.Add(t);
}
protected void Button2_Click(object sender, EventArgs e)
{
Table t = (Table)MyPanel.FindControl("T1");
}
我在那边有问题: Table t = (Table)MyPanel.FindControl("T1");
在变量t中,现在引用了null。我似乎应用程序不知道生成表的代码隐藏。除了在MyPanel之外,还需要在其他地方“注册”表吗?谢谢你的回答。
编辑有关该问题的更多信息
我有没有masterPage的简单页面。有一个带有数字的Gridview。此数字表示新TAble将具有多少行和单元格。当用户选择一行时,我想创建适当的表,然后单击第二个按钮,我需要从表中收集信息。我不知道OnInit或PreRender,需要多少行。这是否意味着我的问题在技术上是不可能的?
您拥有Panel1,但是正在搜索名为MyPanel的表?
protected void Button2_Click(object sender, EventArgs e)
{
Table t = (Table)Panel1.FindControl("T1");
}
这应该给你桌子
编辑
好的,我挖了一些旧的webForms东西来解决这个问题。
但是,如果要稍后在代码中与它进行交互,则必须在表的initialize或preInit事件上添加表。而且,您必须在每个回发上重新创建控制。
public static Control FindControlRecursive(Control root, string id)
{
if (root.id == id)
return root;
foreach (Control ctrl in root.Controls)
{
Control FoundCtl = FindControlRecursive(ctrl, id);
if (FoundCtl != null)
return FoundCtl;
}
return null;
}
您可以像这样使用它。
table myTable = FindControlRecursive(this.Master, "T1") as Table
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句