page_Load方法中的:
if (ViewState["count"] != null)  //若视图状态不为空,则重新加载动态控件
            {
                for (int i = 1; i <= Convert.ToInt16(ViewState["count"]); i++)
                {
                    AddFamily();
                }
            }

根据输入信息的不同动态添加表格(根据输入的家庭成员数进行表格的生成):
 protected void NumofFamTextBox_TextChanged(object sender, EventArgs e)
    {
       int numofFam = Convert.ToInt16(this.NumofFamTextBox.Text.Trim()); //得到家庭成员数        Response.Write("原有行数" + table1.Rows.Count);
        //删除table1中现有的信息
        for (int i = 1; i < table1.Rows.Count; i++)
        {
            this.table1.Rows.RemoveAt(i);
        }
        ViewState["count"] = 0;   //视图状态中的值清零
        //根据家庭成员数添加表格
        for (int j = 1; j < numofFam; j++)
        {
            AddFamily();
            ViewState["count"] = Convert.ToInt16(ViewState["count"]) + 1;  //viewstate 的值加一 
        }
            }
往表格中添加一行:
//添加一行家庭成员表格
    protected void AddFamily()
    {
        TableRow tr = new TableRow();    //初始化表格的一行
        //初始化表格的各列
        TableCell tc1 = new TableCell();
        TableCell tc2 = new TableCell();
        TableCell tc3 = new TableCell();
        TableCell tc4 = new TableCell();
        TableCell tc5 = new TableCell();
        TableCell tc6 = new TableCell();
        TableCell tc7 = new TableCell();
        //定义使用的控件
        TextBox relationTextBox = new TextBox();
        TextBox nameTextBox = new TextBox();
        DropDownList sexDropDownList = new DropDownList();
        TextBox yearTextBox = new TextBox();
        RegularExpressionValidator yearValidator = new RegularExpressionValidator();
        DropDownList monthDropDownList = new DropDownList();
        DropDownList dayDropDownList = new DropDownList();
        TextBox workTextBox = new TextBox();
        TextBox idTextBox = new TextBox();
        RegularExpressionValidator idValidator = new RegularExpressionValidator();
        CheckBoxList gulaoCheckBoxList = new CheckBoxList();
        LinkButton deleteButton = new LinkButton();
        //添加家庭成员关系控件并初始化
        relationTextBox.ID = "relationTextBox" + table1.Rows.Count;
        relationTextBox.Width = Convert.ToUInt16("60");
        //添加家庭成员姓名控件并初始化
        nameTextBox.ID = "nameTextBox" + table1.Rows.Count;
        nameTextBox.Width = Convert.ToUInt16("60");
        //添加家庭成员性别控件并初始化
        sexDropDownList.ID = "sexDropDownList" + table1.Rows.Count;
        sexDropDownList.Items.Add("男");
        sexDropDownList.Items.Add("女");
        //添加家庭成员生日控件并初始化
        //年份控件
        yearTextBox.ID = "yearTextBox" + table1.Rows.Count;
        yearTextBox.Width = Convert.ToUInt16("35");
        yearTextBox.ToolTip = "年份必须填写为4位";
        //年份验证控件
        yearValidator.ID = "yearValidator" + table1.Rows.Count;
        yearValidator.ControlToValidate = "yearTextBox" + table1.Rows.Count;
        yearValidator.SetFocusOnError = true;
        yearValidator.ValidationExpression = @"\d{4}$";
        yearValidator.ErrorMessage = "“年份”格式不准确";
        yearValidator.Text = "*";
        //月份控件
        monthDropDownList.ID = "monthDropDownList" + table1.Rows.Count;
        monthDropDownList.Items.Add("01");
        monthDropDownList.Items.Add("02");
        monthDropDownList.Items.Add("03");
        monthDropDownList.Items.Add("04");
        monthDropDownList.Items.Add("05");
        monthDropDownList.Items.Add("06");
        monthDropDownList.Items.Add("07");
        monthDropDownList.Items.Add("08");
        monthDropDownList.Items.Add("09");
        monthDropDownList.Items.Add("10");
        monthDropDownList.Items.Add("11");
        monthDropDownList.Items.Add("12");
        //日期控件
        dayDropDownList.ID = "dayDropDownList" + table1.Rows.Count;
        dayDropDownList.Items.Add("01");
        dayDropDownList.Items.Add("02");
        dayDropDownList.Items.Add("03");
        dayDropDownList.Items.Add("04");
        dayDropDownList.Items.Add("05");
        dayDropDownList.Items.Add("06");
        dayDropDownList.Items.Add("07");
        dayDropDownList.Items.Add("08");
        dayDropDownList.Items.Add("09");
        dayDropDownList.Items.Add("10");
        dayDropDownList.Items.Add("11");
        dayDropDownList.Items.Add("12");
        dayDropDownList.Items.Add("13");
        dayDropDownList.Items.Add("14");
        dayDropDownList.Items.Add("15");
        dayDropDownList.Items.Add("16");
        dayDropDownList.Items.Add("17");
        dayDropDownList.Items.Add("18");
        dayDropDownList.Items.Add("19");
        dayDropDownList.Items.Add("20");
        dayDropDownList.Items.Add("21");
        dayDropDownList.Items.Add("22");
        dayDropDownList.Items.Add("23");
        dayDropDownList.Items.Add("24");
        dayDropDownList.Items.Add("25");
        dayDropDownList.Items.Add("26");
        dayDropDownList.Items.Add("27");
        dayDropDownList.Items.Add("28");
        dayDropDownList.Items.Add("29");
        dayDropDownList.Items.Add("30");
        dayDropDownList.Items.Add("31");
        //添加家庭成员工作单位控件并初始化
        workTextBox.ID = "workTextBox" + table1.Rows.Count;
        workTextBox.Width = Convert.ToUInt16("125");
        //添加家庭成员身份证控件并初始化
        idTextBox.ID = "idTextBox" + table1.Rows.Count;
        idTextBox.Width = Convert.ToUInt16("130");
        //添加家庭成员身份证号码验证控件并初始化
        idValidator.ID = "idValidator" + table1.Rows.Count;
        idValidator.ControlToValidate = "idTextBox" + table1.Rows.Count;
        idValidator.SetFocusOnError = true;
        idValidator.ValidationExpression = @"\d{17}[\d|X]|\d{15}$";
        idValidator.ErrorMessage = "家庭成员“身份证号”格式不准确";
        idValidator.Text = "*";
        //添加家庭成员孤老情况控件并初始化
        gulaoCheckBoxList.ID = "gulaoCheckBoxList" + table1.Rows.Count;
        gulaoCheckBoxList.RepeatColumns = Convert.ToUInt16("2");
        gulaoCheckBoxList.Items.Add("孤老");
        gulaoCheckBoxList.Items.Add("大病");
        gulaoCheckBoxList.Items.Add("年老");
        gulaoCheckBoxList.Items.Add("残疾");        //向各列添加相应控件
        tc1.Controls.Add(relationTextBox);
        tc2.Controls.Add(nameTextBox);
        tc3.Controls.Add(sexDropDownList);
        tc4.Controls.Add(yearTextBox);
        tc4.Controls.Add(yearValidator);
        tc4.Controls.Add(new LiteralControl("年"));
        tc4.Controls.Add(monthDropDownList);
        tc4.Controls.Add(new LiteralControl("月"));
        tc4.Controls.Add(dayDropDownList);
        tc4.Controls.Add(new LiteralControl("日"));
        tc5.Controls.Add(workTextBox);
        tc6.Controls.Add(idTextBox);
        tc6.Controls.Add(idValidator);
        tc7.Controls.Add(gulaoCheckBoxList);
        //向一行中加入各列
        tr.Cells.Add(tc1);
        tr.Cells.Add(tc2);
        tr.Cells.Add(tc3);
        tr.Cells.Add(tc4);
        tr.Cells.Add(tc5);
        tr.Cells.Add(tc6);
        tr.Cells.Add(tc7);
        //向表格中添加一行
        table1.Rows.Add(tr);
    }

上述代码中可以实现首次输入家庭成员数添加相应行数的表格,但是当输入的家庭成员数再次改变时会出现”添加了多个相同id控件“的错误,这是为什么呢?希望高手指点,谢谢,在线急等! Thankyou

解决方案 »

  1.   

    因为你每次添加前都没把以前添加的表格清空,每次添加都会
            TableRow tr = new TableRow();    //初始化表格的一行 
            //初始化表格的各列 
            TableCell tc1 = new TableCell(); 
            TableCell tc2 = new TableCell(); 
            TableCell tc3 = new TableCell(); 
            TableCell tc4 = new TableCell(); 
            TableCell tc5 = new TableCell(); 
            TableCell tc6 = new TableCell(); 
            TableCell tc7 = new TableCell(); 第二次添加的时候,又是重新生成一次表格!
      

  2.   

     for (int i = 1; i < table1.Rows.Count; i++) 
            { 
                this.table1.Rows.RemoveAt(i); 
            } 
            ViewState["count"] = 0;  //视图状态中的值清零 
    每次输入信息改变后都删除了啊??
      

  3.   

    问题出在pageload 时,如果pageload不重新加载动态控件 则不会出现这样的问题,但是如果不重载提交表单后得不到动态添加的这些控件信息啊!
    是不是我的程序就是错的啊?有没有哪位xdjm有好的方式赐予小妹下,谢谢哦!
      

  4.   

    page_Load方法中的: 
    if (ViewState["count"] != null)  //若视图状态不为空,则重新加载动态控件 
                { 
                    for (int i = 1; i <= Convert.ToInt16(ViewState["count"]); i++) 
                    { 
                        AddFamily(); 
                    } 
                } 这个有没有放if( !this.IsPostBack)里面?
    没放的话,就每次按添加按纽就执行两次for (int i = 1; i <= Convert.ToInt16(ViewState["count"]); i++) 
                    { 
                        AddFamily(); 
                    } 
      

  5.   

    其实我觉得你根本没必要在page_Load事件里放这段代码,反正是要先添数字然后执行
    protected void NumofFamTextBox_TextChanged(object sender, EventArgs e) 
      

  6.   


    但是如果不在pageload中重载,提交表单后得不到动态添加的这些控件信息啊!不是这样子吗??
      

  7.   

    protected void NumofFamTextBox_TextChanged(object sender, EventArgs e) 
        { 
          int numofFam = Convert.ToInt16(this.NumofFamTextBox.Text.Trim()); //得到家庭成员数         Response.Write("原有行数" + table1.Rows.Count); 
            //删除table1中现有的信息 
            for (int i = 1; i < table1.Rows.Count; i++) 
            { 
                this.table1.Rows.RemoveAt(i); 
            } 
            ViewState["count"] = 0;  //视图状态中的值清零 
            //根据家庭成员数添加表格        for (int j = 1; j < numofFam; j++) 
            { 
                AddFamily(); 
                ViewState["count"] = Convert.ToInt16(ViewState["count"]) + 1;  //viewstate 的值加一 
            } 
                }往表格中
    那就把 只个事件里面的去掉!for (int j = 1; j < numofFam; j++) 
            { 
                AddFamily(); 
                ViewState["count"] = Convert.ToInt16(ViewState["count"]) + 1;  //viewstate 的值加一 
            } 
                }往表格中要不你都是执行了两次!
      

  8.   

    其实我觉得你根本没必要在page_Load事件里放这段代码
      

  9.   

    找到问题了   
     //删除table1中现有的信息 
            for (int i = 1; i < table1.Rows.Count; i++) 
            { 
                this.table1.Rows.RemoveAt(i); 
            } 

    但是只是删除了第一行的信息,很是奇怪??、/希望有高手继续关注
    后来就采用了 table1.clear()的方式就可以删除掉整个表格重新开始了。
    我之前的表格是有个表头的,这次表头每次都要动态加了。