0

我有这样的代码

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。这个数字意味着新的表格将有多少行和单元格。当用户选择一行时,我想创建适当的表,然后单击第二个按钮,我需要从表中收集信息。OnInit 或 PreRender 我不知道我需要多少行。这是否意味着我的问题在技术上是不可能的?

4

3 回答 3

1

您有 Panel1 但您正在搜索一个名为 MyPanel 的表?

protected void Button2_Click(object sender, EventArgs e)
{
            Table t = (Table)Panel1.FindControl("T1");
}

这应该给你桌子

编辑

好的,我挖掘了一些旧的 webForms 东西,这些东西正是这样做的。

但是,如果您想稍后在代码中与它交互,您必须在页面的初始化或 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
于 2013-09-16T07:29:44.367 回答
0

做你的代码 OnPreRender

protected override void OnPreRender(EventArgs e)
    {
            Table t = new Table() ;
            t.ID = "T1";
            t.Visible = true;
            MyPanel.Controls.Add(t);
    }
于 2013-09-16T08:49:52.560 回答
-3

ctl00$ContentPlaceHolder1$UrunlerRAjax1$rptCustomers

contentplaceholder-->usercontrol-->repeater

Repeater rptCustomers = this.Page.Master.FindControl("ContentPlaceHolder1").FindControl("UrunlerRAjax1").FindControl("rptCustomers") as Repeater;

中继器 rptCustomers = this.Page.Master.FindControl("ContentPlaceHolder1").FindControl("UrunlerRAjax1").FindControl("rptCustomers") 作为中继器;

中继器repeaterName = this.Page.Master.FindControl("ContentName").FindControl("UsercontrolName").FindControl("repeaterName") 作为中继器;

于 2014-06-04T11:12:08.283 回答