foreach (DataRow row in ResultSet.Tables[0].Rows)
            { 
                TableRow tr = new TableRow();
                TableCell tc = new TableCell();                TextBox tbpingfen = new TextBox();                
                tbpingfen.Text = row["Value"].ToString();
                tbpingfen.ID = row["pk_hr_pf_Indexes"].ToString();                tc.Controls.Add(tbpingfen);
                tr.Cells.Add(tc);                Tableziwo.Rows.Add(tr);
            }
(代码我简化了,明白意思就行)循环创建行,这里行只有一列,是textbox
把行加到table中去然后   string id = 之前创建textbox的id
   TextBox tb = (TextBox)tableziwo.FindControl(id);
   string tbv = tb.Text;
根据textbox的id找到textbox
点击LinkButton把数据update到数据库点LinkButton  是找不到textbox的  因为更新了, 之前动态创建的textbox都没了~里面的值更是没了~~
这种情况要怎么办???各位大侠 求解决~

解决方案 »

  1.   

    动态创建的你需要使用Request.Form["inputname"]得到输入的内容
      

  2.   


    你没看明白意思  我点LinkButton 要保存的时候  页面刷新了 数据全没了~ 找不到textbox了 更找不到textbox里的数据了~~~~
      

  3.   

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("str1") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("str2") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("str3") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="增加行" />
                            <asp:Button ID="Button2" runat="server" Text="删除行" onclick="Button2_Click" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("str1");
                dt.Columns.Add("str2");
                dt.Columns.Add("str3");
                for (int i = 0; i < 5; i++)
                {
                    DataRow dr = dt.NewRow();
                    dt.Rows.Add(dr);
                }
                this.GridView1.DataSource = dt;
                this.GridView1.DataBind();
            }
        }    protected void Button1_Click(object sender, EventArgs e)
        {
            // 行号
            int row = ((GridViewRow)((Button)sender).NamingContainer).RowIndex;
            DataTable dt = new DataTable();
            dt.Columns.Add("str1");
            dt.Columns.Add("str2");
            dt.Columns.Add("str3");
            foreach (GridViewRow item in this.GridView1.Rows)
            {
                DataRow dr = dt.NewRow();
                dr["str1"] = ((TextBox)item.Cells[0].FindControl("TextBox1")).Text;
                dr["str2"] = ((TextBox)item.Cells[1].FindControl("TextBox2")).Text;
                dr["str3"] = ((TextBox)item.Cells[2].FindControl("TextBox3")).Text;
                dt.Rows.Add(dr);
            }
            dt.Rows.InsertAt(dt.NewRow(), row+1);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }    protected void Button2_Click(object sender, EventArgs e)
        {
            // 行号
            int row = ((GridViewRow)((Button)sender).NamingContainer).RowIndex;
            DataTable dt = new DataTable();
            dt.Columns.Add("str1");
            dt.Columns.Add("str2");
            dt.Columns.Add("str3");
            foreach (GridViewRow item in this.GridView1.Rows)
            {
                DataRow dr = dt.NewRow();
                dr["str1"] = ((TextBox)item.Cells[0].FindControl("TextBox1")).Text;
                dr["str2"] = ((TextBox)item.Cells[1].FindControl("TextBox2")).Text;
                dr["str3"] = ((TextBox)item.Cells[2].FindControl("TextBox3")).Text;
                dt.Rows.Add(dr);
            }
            dt.Rows.RemoveAt(row);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
      

  4.   

    找数据的方法。
    直接拷贝粘贴测试<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">  protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          for (int i = 0; i < 6; i++)
          {
            TableRow tr = new TableRow();
            TableCell td = new TableCell();
            TextBox t = new TextBox();
            t.ID = "TextBox" + i.ToString();
            td.Controls.Add(t);
            tr.Cells.Add(td);
            Table1.Rows.Add(tr);
          }
        }
      }  protected void LinkButton1_Click(object sender, EventArgs e)
      {
        for (int i = 0; i < 6; i++)
        {
          Response.Write("<li>你输入的是:" + Request.Form["TextBox" + i]);
        }
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:Table ID="Table1" runat="server">
      </asp:Table>
      <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>
      </form>
    </body>
    </html>
      

  5.   

     我是菜鸟中的新手
         能解释一下代码么?  为什么load 和click 事件都在script里~   还有   ,这个在web用户控件里能实现吗?
      

  6.   

    在你的PageLoad事件里面加上if(!IsPostBack)问题应该在这里,具体参考上面几位的代码。
      

  7.   

    你应该看到 script runat="server"  这里还有个 runat 属性呢,这里写的就是后台web服务器上的代码,不是javascript。
      

  8.   

    创建textbox的时候,写在pageload里面加上!ispostback;
    然后linkbutton点击后,textbox就不会消失了!
    或者使用updatepanel试试!还有就是创建客户端控件,用request获取值!
      

  9.   

    你把动态创建的代码放到page_load里,不要放到if(!ispostback)里,page_load里的动态添加不要赋值然后就可以用了
      

  10.   

       你在page_load的时候直接创建了5行   我不知道 数据库有多少条数据 要怎么动态创建?
      

  11.   


      我要根据用户点击 treeview后 得到数据  然后才能知道有多少条数据  我就创建多少个textbox
       这个要怎么放到page——load里?
      

  12.   


    我做的是WEB用户控件   貌似不能通过Request.Form 取到值~~