ASP.NET (C#)动态添加控键

来源:互联网 发布:淘宝茶叶店铺前十 编辑:程序博客网 时间:2024/06/01 07:38
参考  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  if(Page.IsPostBack)  
  {  
  if(ViewState["IsLoadTextBox"]!=null)  
  {  
  Add();  
  }  
  }  
  }  
   
  private   void   Button1_Click(object   sender,   System.EventArgs   e)  
  {  
  if(ViewState["IsLoadTextBox"]==null)  
  {  
  Add();  
  ViewState["IsLoadTextBox"]=1;  
   
  }  
  }  
   
  private   void   Add()  
  {  
  TableRow   r   =   new   TableRow();  
  TableCell   c=new   TableCell();  
  HtmlInputFile   t=new   HtmlInputFile();  
  t.ID="tbfile";  
  c.Controls.Add(t);  
  r.Cells.Add(c);  
  this.Table1.Rows.Add(r);  
  }  
  } 


//====================================  
  //动态创建控件的最佳时机OnInit  
  //====================================  
   
  用例子说明怎样动态创建控件.    
   
  没有多写注释,有问题的请问.  
   
    希望对你

开发比较动态的控件有帮助.  
   
  <%@   Page   Language=C#   %>  
  <SCRIPT   runat="server">  
   
  public   class   MyControl   :   Control   ,   INamingContainer  
  {  
    Button   btn1;  
    HyperLink   link1;  
     
    LinkButton   btn2;  
    HyperLink   link2;  
   
    override   protected   void   CreateChildControls()  
    {  
      CreateControlsByType();  
    }  
     
    protected   void   CreateControlsByType()  
    {  
      object   o=ViewState["type"];  
      int   t=o==null?1:(int)o;//默认是方案1  
       
      if(t==1)  
      {  
        btn1=new   Button();  
        btn1.Text="切换到方案2";  
        btn1.Click+=new   EventHandler(btn1_Click);  
        link1=new   HyperLink();  
          link1.NavigateUrl="http://www.asp.net";  
        link1.Text="Link1";  
         
        Controls.Add(new   LiteralControl("<table   border=1><tr><td>"));  
        Controls.Add(btn1);  
        Controls.Add(new   LiteralControl("</td><td>"));  
        Controls.Add(link1);  
        Controls.Add(new   LiteralControl("</td></tr></table>"));  
      }  
      else//方案2  
      {  
        btn2=new   LinkButton();  
        btn2.Text="切换到方案1";  
        btn2.Click+=new   EventHandler(btn2_Click);  
         
        link2=new   HyperLink();  
        link2=new   HyperLink();  
        link2.NavigateUrl="http://www.microsoft.com";  
        link2.Text="Link2";  
         
        Controls.Add(new   LiteralControl("<table   border=1><tr><td>"));  
        Controls.Add(btn2);  
        Controls.Add(new   LiteralControl("</td><td>"));  
        Controls.Add(link2);  
        Controls.Add(new   LiteralControl("</td></tr></table>"));  
      }  
    }  
    void   EnsureRecreateControls()  
    {  
      if(ChildControlsCreated)  
      {  
        Controls.Clear();  
        CreateControlsByType();  
      }  
      else  
      {  
        EnsureChildControls();  
      }  
    }  
     
    void   btn1_Click(object   sender,EventArgs   args)  
    {  
      ViewState["type"]=2;  
       
      EnsureRecreateControls();  
       
      link2.Text="已经切换为2方案了";  
    }  
    void   btn2_Click(object   sender,EventArgs   args)  
    {  
      ViewState["type"]=1;  
       
      EnsureRecreateControls();  
       
      link1.Text="已经切换为1方案了";  
    }  
  }  
   
  override   protected   void   OnInit(EventArgs   args)  
  {  
    holder1.Controls.Add(new   MyControl());  
    base.OnInit(args);  
  }  
  </SCRIPT>  
  <html>  
    <head>  
      <title>Sample   By   Lostinet</title>  
      <meta   name="vs_targetSchema"   content="http://schemas.microsoft.com/intellisense/ie5">  
    </head>  
    <body>  
      <form   id="SampleForm"   method="post"   runat="server">  
        <asp:PlaceHolder   Runat=server   ID=holder1>  
        </asp:PlaceHolder>  
        <br/>  
        <asp:Button   Runat=server   Text="在控件之外进行回发"></asp:Button>  
      </form>  
    </body>  
  </html>