我在页面上定义了一个table1,然后在后台动态创建一个控件textbox,可是我在要调用这个控件是总是找不到?  例如:System.Web.UI.HtmlControls.HtmlTableRow tr =new HtmlTableRow();
System.Web.UI.HtmlControls.HtmlTableCell td=new HtmlTableCell();
this.table1.Controls.Add(tr);
tr.Controls.Add(td);
         TextBox txtS=new TextBox();
txtS.ID="txtData";
td.Controls.Add(txtS);    等页面生成后我要使用它的时候:TextBox txtDate=(TextBox)this.FindControl("txtData");
                        或:TextBox txtDate=(TextBox)this.table1.FindControl("txtData");
                          或:TextBox txtDate=(TextBox)this.Page.FindControl("txtData");
    却总提示我找不到这个控件?
    有谁知道这是怎么回事啊?拜托了!

解决方案 »

  1.   

    等页面生成后我要使用它的时候:TextBox txtDate=(TextBox)this.FindControl("txtData");
                            或:TextBox txtDate=(TextBox)this.table1.FindControl("txtData");
                              或:TextBox txtDate=(TextBox)this.Page.FindControl("txtData");这些工作如果是在下次提交时做的,那上面做的添加TextBox控件的工作都白做了,就是说TextBox控件丢失了,我也是刚才实验得出的结果。个人觉得应该是保留的呀!!!!视图状态?
      

  2.   

    动态创建的控件不会保存在viewstate中。如果非要动态创建,在Page_Load里每次都要执行创建过程。
      

  3.   

    同意楼上说法,  
    例如:System.Web.UI.HtmlControls.HtmlTableRow tr =new HtmlTableRow();
    System.Web.UI.HtmlControls.HtmlTableCell td=new HtmlTableCell();
    this.table1.Controls.Add(tr);
    tr.Controls.Add(td);
             TextBox txtS=new TextBox();
    txtS.ID="txtData";
    td.Controls.Add(txtS);
    该代码在page_load中的if(!ispostback){}外
      

  4.   

    哇!总算解决了,确实要每次都要在page_load里每次都要执行创建过程,也就是要在page_load的
    if(!ispostback)外,谢谢啊!!