页面:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtNum" runat="server" ontextchanged="txtNum_TextChanged" AutoPostBack="true"></asp:TextBox>
    
    </div>
    <div id="divSelect" runat="server">
    
    </div>
    </form>
</body>
</html>
代码:
protected void  txtNum_TextChanged(object sender, EventArgs e)
    {
        int result = 0;
        bool isnum = int.TryParse(txtNum.Text,out result);
        for (int i = 1; i <= result; i++)
        {
            string id = "ddl" + i.ToString();
            Label lab = new Label();
            lab.Text = "类型" + i;
            divSelect.Controls.Add(lab);
            DropDownList ddl = new DropDownList();
            ddl.ID = id;
            ddl.DataSource = 数据源;
            ddl.DataTextField = 字段名;
            ddl.DataValueField = 字段值;
            ddl.DataBind();
            divSelect.Controls.Add(ddl);
        }
    }
如上面的代码,添加多个控件后如何取得他们的值

解决方案 »

  1.   

    遍历divSelect中的Controls就可以了
    foreach (Control con in this.divSelect.Controls)
            {
                if (con is Label)
                { 
                    //code
                }
                if (con is DropDownList)
                {
                    //code
                }
            }
      

  2.   

    不是你那种 txtNum_TextChanged编程就可以了解的。你可以做一个简单的测试,在网页上放一个Button,然后运行时时不时点击这个Button看看回发之后你的动态控件还存在、各种状态还正常吗?如果状态不正常、甚至都不存在了,就别往下再去做什么应用了,先搞清楚这个测试如何应对再说。在你写“动态控件”之前,先用明白的办法在divSelect里边放上Repeater控件绑定数据(模板中放入那两个子控件),先写好应用。先不要搞什么动态控件。
      

  3.   

    我用如下代码要报空引用的错                        int result = 0;
                            bool isnum = int.TryParse(txtNum.Text, out result);
                            for (int i = 1; i <= result; i++)
                            {
                                string aaa = ((DropDownList)this.FindControl("ddl" + i.ToString())).SelectedValue;
                            }
      

  4.   

    可以先写好Label和DropDownList,设为Visible=false,执行TextBox_TextChanged事件后再设为Visible=true,这样不行吗??
    何必要用什么动态控件,不稳定。。