目标是做一个动态的表格,表格中有一个可变的二维数组对应的TextBox[,] tb。
我把tb声明为静态全局变量,但提交的时候无法获取用户输入的值。---------------------aspx----简易代码如下:-------------------------------
<!--省略-->
   <asp:dropdownlist id="ddlRow" runat="server" onSelectedIndexChanged = "selectRow"></asp:dropdownlist>
   <asp:dropdownlist id="ddlCol" runat="server" onSelectedIndexChanged = "selectCol"></asp:dropdownlist>
   <asp:table id="dynamicTable" runat="server"></asp:table>
   <asp:button id="sbmt" runat="server" Text="提交" onClick="tbSubmit" />
<!--省略-->---------------------cs  -----简易代码如下:-------------------------------
//省略
public appClass {
   static TextBox[,] tb;
   static int row, col;
   protected void Page_Load(object sender, EventArgs e) {
     //....
     //获取行数和列数到row和col这两个变量中
     //....
     createTable(row, col);
   }
   protected void selectRow(object sender, EventArgs e) {
   } 
   protected void selectCol(object sender, EventArgs e) {
   } 
   protected void createTable(int row, int col) {
     tb = new TextBox[row,col];
     TableRow r;
     TableCell c;
     //添加表格行
     for (int i = 0; i < row; i++) {
           r = new TableRow();
           //添加表格单元
           for (int j = 0; j < col; j++){
                  c = new TableCell();
                  tb[i,j] = new TextBox();
                  c.Controls.Add(tb[i,j]);
                  r.Cells.Add(c);
           }
           DynamicTable.Rows.Add(r);
     }
   }
   protected void tbSubmit(object sender, EventArgs e) {
       // 遍历生成的TextBox控件的用户值。***结果全为"" 
       // 监视DynamicTable.Rows.Count值为0 没有保存动态添加的行。
       // ------------------鸿沟------------------------------
       // 添加数据到数据库。
   }
}
//省略

解决方案 »

  1.   

    你可以在this.Controls[TextBoxid]  这样来获取控件...
      

  2.   

    for (int i=0,i<row-1,i++)
    {
      asdf+=this.Controls['TextBox'+i]}
      

  3.   

    我所要想明白的问题在于:在点击“提交”按钮后,页面会开始一次刷新,如何才能记住刷新前的页面状态?
    或者如何才能让我所声明的tb[i,j]能像普通页面中定义的<asp:textbox id="common" /> 一样不管页面如何
    刷新,都能在需要的时候通过common.Text来获得用户数据?
      

  4.   

    for (int i=0,i <row-1,i++) 

      value+=(this.FindControl['TextBox'+i]).text;
      

  5.   

    可能我比较笨吧,不知道给出这个代码"
    for (int i=0,i <row-1,i++)
    {
      value+=(this.FindControl['TextBox'+i]).text;

    "的朋友是建议我把它加到什么地方呢?
    如果加在提交函数中,那也要先运行page_load函数,用户数据还是被置位,不是吗?
      

  6.   


    通过isPostback来判断
    第一次访问初始化这些控件,第二次直接取。if (!IsPostBack)
    {
    createTable(row, col); 
    }
    else
    {
    for (int i=0,i <row-1,i++) 

      value+=(this.FindControl['TextBox'+i]).text; 

    }
      

  7.   

    8楼说的好像也不行吧?
    FindControl是函数,不能使用[],改为()、把单引号改为双引号、把i改为i.ToString()后也是运行时错误。
    但,好像最关键的还是不能回到page_load这个函数。因为我直接停在它的入口,使用调试工具
    中的“监视”来查看this.FindControl("TextBox" + i),结果都是null;另外我自己定义的
    二维数组的对象都还在,但仿佛没有接受过用户的输入。另外,无意冒犯的问一问,8楼的朋友是否有亲自运行调试过,还是只是简单的理解一下就来帮忙呢?时间宝贵,如果有高手知道如何解决的话,就请帮忙具体明白的说明一下吧。
      

  8.   

    你重写Page_init  事件,在这个方法里面添加控件
      

  9.   

    我有一种方法,就是在客户端使用JS生成表格,并在页面中放一个服务器的Hidden域,
    然后点提交时,使用onclientclick在这个里面来处理用户填写的数据,使用固定的分隔符把所有数据相加起来,
    然后赋值给Hidden,然后在服务器分隔Hidden的值。
    如果想用这个方法还有其它问题,Please Send me a message!
      

  10.   

    动态生成的table从后台得不到里面的值,怎么办