int tableRows = rows;  //接收用户设置行数
        int tableCells = 3;  //3列
        int tbId = 1; //由于一行有多个Textbox,要设置每个TextBox的ID唯一性。
        for (int i = 1; i <= tableRows; i++)
        {
            int p = i - 1;//设定数据记录的第一行起始位            //ds.Tables["bumen"].Rows[i]["bumen"].ToString().Trim();
            TableRow tableRow = new TableRow();
            for (int j = 1; j <= tableCells; j++)
            {              
                    switch (j)
                    {
                        case 1:  //第一列
                            TableCell tableCell1 = new TableCell();
                            tableCell1.BorderWidth = Unit.Pixel(1);
                            Label lb1 = new Label();
                            // FileUpload fileUpload = new FileUpload();
                            lb1.ClientIDMode = ClientIDMode.Static;
                            lb1.ID = p.ToString();
                            lb1.Text = i.ToString();
                            lb1.Attributes.Add("runat ", "server "); 
                            tableCell1.Controls.Add(lb1);
                            tableRow.Cells.Add(tableCell1);
                            break;                        
                        case 2: //第二列
                            TableCell tableCell2 = new TableCell();
                            tableCell2.BorderWidth = Unit.Pixel(1);
                           Label lb2 = new Label();
                            lb2.ClientIDMode = ClientIDMode.Static;
                            lb2.ID ="B"+p.ToString();
                            lb2.Text = ds1.Tables["zxj"].Rows[p]["XM"].ToString();
                            tableCell2.Controls.Add(lb2);
                            tableRow.Cells.Add(tableCell2);
                            break;
                        case 3: //第三列
                            TableCell tableCell3 = new TableCell();
                            tableCell3.BorderWidth = Unit.Pixel(1);
                            TextBox textBox3 = new TextBox();
                            textBox3.ClientIDMode = ClientIDMode.Static;
                            textBox3.ID = "C" + p.ToString();
                            textBox3.Width = 10;
                            tbId = tbId + 1;
                            tableCell3.Controls.Add(textBox3);
                            tableRow.Cells.Add(tableCell3);
                            break;
                       
                                           }               
            }
            TableUploadlayout.Rows.Add(tableRow);
        }以上为生成控件代码。我是想根据数据库记录条数生成控件,然后在控件中录入数据后存入数据库中,问题是怎样才能取到生成控件:A0、A1... 和C0、C1的值呢?试了很多方法,如:启用页面的viewstate、用((Label)this.Page.FindControl("A" + i.ToString())).Text取值、用Request.Form["A" + i.ToString()].ToString()取什都没有实现,请帮助。控件

解决方案 »

  1.   

    请尝试如下方法:
    1 在 OnLoad 中,无论是首次加载还是用回发的方式打开页面,都需要调用上述动态生成控件的代码,并且把动态后成的控件放到数组中去。
    2 在某个服务端控件事件(如按钮的点击事件)中,访问第一步中生成控件的值,用户输入的值应该已经在其中了。
      

  2.   

    http://bbs.csdn.net/topics/390443000?page=1#post-394351193
    http://bbs.csdn.net/topics/380169102
    http://bbs.csdn.net/topics/390510321?page=1#post-394969349
      

  3.   

    比如说你写
                                lb1.Text = i.ToString();
                                lb1.Attributes.Add("runat ", "server "); 
    这两行代码,这在第一次加载动态控件时有用的,但是在回发时就根本是多余的。因为asp.net只要找到相同结构位置相同ID号的控件,就会自动把上一次输出html时保存的状态数据回填给它,而你赋值的结果会被asp.net覆盖。另外,给客户端html element设置runat属性也是没有作用的,因为浏览器上又不执行asp.net。如果你知识浅尝辄止,那么不要再考虑“动态生成控件”这个课题,使用DataList等等现成的数据绑定控件来处理。如果你要学习,那么你现在的知识(你的代码中的几个概念错误表现出来的你对asp.net的理解)不足以去学习这个机制,可能需要在学习一年以后再开始学习控件开发知识,或者需要有人面对面地给你指导才行。