我现在的办法是定义一个函数,在这个函数中为使用page.control.add添加这个组件,之所以不直接在ASPX文件中直接定义,是因为添加多少个组件需要从数据库读取个数,并且为组件赋予必要的值,但是现在的问题是,这个ASPX文件中还有其他的控件,如txt,downdroplist,button,我希望加入的自定义组件在这些控件的前面,但是我把该函数写在page_load中,运行后的aspx文件中,依然在以上控件的后面,如果把txt,downlist,button等控件也动态加入的话,又有错误提示,button控件必须要加runat=server。
请问有什么办法可以解决这个问题:即根据数据库动态添加多个自定义服务器WEB控件,而且能够根据数据库赋值。最重要的是,必须在aspx文件中定义的控件之前。试过在aspx文件中直接<%=函数%>或者<%#函数%>都不能解决。

解决方案 »

  1.   

    你是要添加自定义控件还是用户控件?这两个概念不同。
    而你的自定义组件是什么?但从你的page.control.add看好像是自定义控件了。
      

  2.   

    在PageLoad里代码如下 
    for (int i = 0; i  < GridView1.Rows.Count; i++) 

          TextBox txt = new TextBox(); 
          txt.ID = "txt" + i; 
          GridView1.Rows[i].Cells[7].Controls.Add(txt); 
    } 在一个按钮的点击事件中 
    for (int i = 0; i  < GridView1.Rows.Count; i++) 

         Control controlText = GridView1.Rows[i].Cells[7].FindControl("txt" + i); 
    } 特别注意:动态添加控件的代码不可放到非IsPostBack里,对动态添加的控件,无论是否IsPostBack都要执行才可以。
    比如: Page_Load() 

       if (!this.IsPostBack) 
       {    } 
       this.addControls(); 
    }
      

  3.   

    郁闷,我说的不够清楚吗?
    我能够添加自定义控件,现在要求的是动态添加的自定义WEB服务器控件位置在ASPX中设置的控件前面
      

  4.   

    不知道你要添加的是服务器端的还是客户端的组件?
    服务器端的话必须要放在Form表单里面,客户端则通过js添加
      

  5.   

    你在这些控件前面放一个Div,在其中放置一个Panael试一下,如果没有控件可加载,就把div隐藏掉。
      

  6.   

    <asp:Panel id="Panel1" runat="server" visible="false"
    <asp:PlaceHolder id="PlaceHolder1" runat="server" visible="true"
    <Div id="div1" runat="server" visible="false"
    <Span id="span 1" runat="server" visible="false"如 8 楼,用 C# 控制,以上四个容器 tag 或控件,哪个要显示、哪个要隐藏,
    visible="true" or "false"
    把 Custom Control 放在这四种容器的其中一种。
      

  7.   

    protected void Page_Load(object sender, EventArgs e)
    {
        Button btn1 = new Button();
        btn1.ID = "myBtn1";
        
        PlaceHolder1.Controls.Add(btn1);
    }