想要的效果:在页面上有一个textbox 输入一个数,点击button分段,根据输入的数字,动态几行生成控件,
点提交获取动态控件值。我在form_load中调用this.AddRow()想做画面重构,结果就会多出几行控件,
比如输入的数是2,点button分段生成了2行控件,输入值后
一点提交button就会成为4行问题1:怎么重构画面,才能正确,输入的值不会丢失
问题2:动态控件的取值高手们帮帮忙看看到底改怎么写?
//提交事件
protected void btnButton1_Click(object sender, EventArgs e)
        {            
            
 for (int i = 0; i < TableFD.Rows.Count; i++)
                {
                    string str1 = ((TextBox)form1.FindControl("txtStartNum" + i)).Text;
                    lblMsg.Text += str1;
                }
        }
protected void btnFenDuan_Click(object sender, EventArgs e)
        {            
            
                this.AddRow();        }
#region 表格操作
        private void AddRow()
        {
           
            TextBox TextBox1;
            Label Label1;
            DropDownList DropDownList1;
            ListItem item;
            int duanshu = Convert.ToInt32(txtDuanShu.Text.Trim());//要分的分段数
            for (int i = 0; i < duanshu; i++)
            {
                TableRow tr = new TableRow();
                //tr.Height = 30;
                tr.Style.Add("font-size", "12px");
                tr.Style.Add("text-indent", "5px");
                tr.Style.Add("padding-left", "5px");                TableCell td1 = new TableCell();
                //td1.Style.Add("font-size", "12px");
                //td1.Style.Add("text-indent", "5px");
                //td1.Style.Add("padding-left", "5px");
                td1.Style.Add("background-color", "#DBEFFA");
                td1.Style.Add("text-align", "center");
                td1.Style.Add("width", "20%");
                //td1.Width = System.Web.UI.WebControls.Unit.Parse("20%", System.Globalization.CultureInfo.InvariantCulture);
                //报销范围 Label
                Label1 = new Label();
                Label1.Text = "报销范围:";
                td1.Controls.Add(Label1);                TableCell td2 = new TableCell();
                //td2.Style.Add("font-size", "12px");
                //td2.Style.Add("text-indent", "5px");
                //td2.Style.Add("padding-left", "5px");
                td2.Style.Add("width", "80%");
                //td2.Width = System.Web.UI.WebControls.Unit.Parse("80%", System.Globalization.CultureInfo.InvariantCulture);
                //开始数
                TextBox1 = new TextBox();
                TextBox1.ID = "txtStartNum" + i.ToString();
                TextBox1.Width = 80;
                if (i == 0)
                {
                    TextBox1.Text = "0";
                }
                td2.Controls.Add(TextBox1);                //开始< <= =
                DropDownList1 = new DropDownList();
                DropDownList1.ID = "ddlStart" + i.ToString();
                item = new ListItem();
                item.Text = "<";
                item.Value = "<";
                DropDownList1.Items.Add(item);
                item = new ListItem();
                item.Text = "<=";
                item.Value = "<=";
                DropDownList1.Items.Add(item);
                item = new ListItem();
                item.Text = "=";
                item.Value = "=";
                DropDownList1.Items.Add(item);
                td2.Controls.Add(DropDownList1);                //报销金额 Label
                Label1 = new Label();
                Label1.Text = " 报销金额 ";
                td2.Controls.Add(Label1);                //结束< <= =
                DropDownList1 = new DropDownList();
                DropDownList1.ID = "ddlEnd" + i.ToString();
                item = new ListItem();
                item.Text = "<";
                item.Value = "<";
                DropDownList1.Items.Add(item);
                item = new ListItem();
                item.Text = "<=";
                item.Value = "<=";
                DropDownList1.Items.Add(item);
                item = new ListItem();
                item.Text = "=";
                item.Value = "=";
                DropDownList1.Items.Add(item);
                td2.Controls.Add(DropDownList1);                //结束数
                TextBox1 = new TextBox();
                TextBox1.ID = "txtEndNum" + i.ToString();
                TextBox1.Width = 80;
                if (i == (duanshu - 1))
                {
                    TextBox1.Text = "-1";
                }
                td2.Controls.Add(TextBox1);                //报销比例 Label
                Label1 = new Label();
                Label1.Text = " 报销比例:";
                td2.Controls.Add(Label1);                //报销比例 TextBox
                TextBox1 = new TextBox();
                TextBox1.ID = "txtBXBiLi" + i.ToString();
                TextBox1.Width = 80;
                TextBox1.Text = "0";
                td2.Controls.Add(TextBox1);                //% Label
                Label1 = new Label();
                Label1.Text = " %";
                td2.Controls.Add(Label1);
                tr.Cells.Add(td1);
                tr.Cells.Add(td2);
                TableFD.Rows.Add(tr);
            }
        }
        
        #endregion

解决方案 »

  1.   

    在生成之前
    先把你放控件的容器Clear()一下
    td2.Controls.Clear();
      

  2.   

    AddRow后,把duanshu 保存在ViewState中,
    Page_Load中根据ViewState的duanshu 来AddRow
      

  3.   

    http://topic.csdn.net/u/20090429/09/d75a0085-b6e5-421b-b0b2-7337e5e06371.html
      

  4.   


    clear(),那输入的值不也就没了吗
      

  5.   

    点击button时,才动态生成控件,在Page_Load时,怎样重构才正确?
      

  6.   

    每次page_load,都要重新生成所有控件,无论是否IsPostBack
      

  7.   


     生成的控件是放在Panel1里面的试试
    Panel1.Controls.Add(l);
      

  8.   

    js动态生成能给个例子吗,我不擅长用JS