<asp:ImageButton ID="ImageButton1" runat="server"  ImageUrl="images/new.gif" CssClass="imgbt" OnClick="ImageButton1_Click"/>
 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"     CssClass="gridviewStlye"      OnRowDataBound="GridView1_RowDataBound">
            <Columns>
       
                            <asp:TemplateField HeaderText="NO." InsertVisible="False" >
                                
                                 <ItemTemplate>
                                    <asp:Label id="seq" runat="server"  Text="<%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1 %>" ></asp:Label> 
                                 </ItemTemplate>
                            </asp:TemplateField>              <asp:TemplateField HeaderText="项目">
                 <ItemTemplate>
                     <asp:TextBox ID="itemnm" runat="server" Text='<%#Eval("itemnm") %>'     TextMode="MultiLine"  Rows="6"></asp:TextBox>
  
                 </ItemTemplate>
                
              </asp:TemplateField>
              
              
              <asp:TemplateField HeaderText="加重值">
                 <ItemTemplate>
                     <asp:TextBox ID="gradenm" runat="server" Text='<%#Eval("gradenm") %>' ></asp:TextBox>
  
                 </ItemTemplate>
                
              </asp:TemplateField>
              
              
               <asp:TemplateField HeaderText="目标">
                 <ItemTemplate>
                     <asp:TextBox ID="aimnm" runat="server" Text='<%#Eval("aimnm") %>'     TextMode="MultiLine"  Rows="6"></asp:TextBox>
  
                 </ItemTemplate>
                
              </asp:TemplateField>
                 <asp:TemplateField HeaderText="评价方法">
                 <ItemTemplate>
                     <asp:TextBox ID="methodnm" runat="server" Text='<%#Eval("methodnm") %>'     TextMode="MultiLine"  Rows="6"></asp:TextBox>
  
                 </ItemTemplate>
                
              </asp:TemplateField>
              
              
                <asp:BoundField  DataField="flag"   ItemStyle-CssClass="noDis" HeaderStyle-CssClass="noDis"/>            
            </Columns>
          
                    </asp:GridView>
            </div>
 protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        DataTable tb = (DataTable)ViewState["tb"];
        DataRow dr = tb.NewRow();
        dr[0] = 0;
        dr[1] = "";
        dr[2] = 0;
        dr[3] = "";
        dr[4] = "";
        dr[5] ="new";        tb.Rows.Add(dr);
        GridView1.DataSource = tb;
        GridView1.DataBind();
    }点击能增加行,但是如果增加一行,在这行中填写了数据,再点增加按钮,前面那行写的内容就不见了,怎么修改能随时增加行,但之前写的内容还在的?
    

解决方案 »

  1.   

    增加以后ViewState["tb"]没有保存。
    DataTable tb = (DataTable)ViewState["tb"];
      DataRow dr = tb.NewRow();
      dr[0] = 0;
      dr[1] = "";
      dr[2] = 0;
      dr[3] = "";
      dr[4] = "";
      dr[5] ="new";
      tb.Rows.Add(dr);
    ViewState["tb"]=tb;
      

  2.   

    你有保存ViewState 的地方么
      

  3.   


    这样也不行的,可能我还没说得清楚,还有个方法是
        protected void show_data()
        {        string str = "  select id ,itemnm,gradenm,aimnm,methodnm,'old' flag  from ttable";               DataTable tb = new DataTable();
           
            ...................
            ViewState["tb"] = tb;        
            GridView1.DataSource = tb;
            GridView1.DataKeyNames = new string[] { "id" };
            GridView1.DataBind();           
        } protected void Page_Load(object sender, EventArgs e)
        {
                   
            if (!Page.IsPostBack)
            {
               
                show_data();
                
            }
        }
    现在还是如果是新增加一行后,填写内容,没有保存到数据库,然后再点击填写一行,之前填写一行就内容没了,如果是先保存到数据库中,再点击新增加一行,那么内容肯定是在的
      

  4.   

     protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            DataTable tb = (DataTable)ViewState["tb"];
            int deli = 0, deli1 = 0;        for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                TextBox itemnm1 = (TextBox)GridView1.Rows[i].FindControl("itemnm");
                TextBox gradenm1 = (TextBox)GridView1.Rows[i].FindControl("gradenm");
                TextBox aimnm1 = (TextBox)GridView1.Rows[i].FindControl("aimnm");
                TextBox methodnm1 = (TextBox)GridView1.Rows[i].FindControl("methodnm");            
                   
              
                           if (GridView1.Rows[i].Cells[5].Text.Trim() == "new")
                {
                    if (deli1 == 0)
                    {
                        deli = i;
                    }
                    deli1++;                tb.Rows[deli].Delete();
                                 DataRow dr1 = tb.NewRow();                
                    dr1[0] = 0;
                    dr1[1] = itemnm1.Text;
                    dr1[2] = gradenm1.Text;
                    dr1[3] = aimnm1.Text;
                    dr1[4] = methodnm1.Text;
                    dr1[5] = "new";                tb.Rows.Add(dr1);
                                }
            }
            DataRow dr = tb.NewRow();
            dr[0] = 0;
            dr[1] = "";
            dr[2] = 0;
            dr[3] = "";
            dr[4] = "";
            dr[5] ="new";        tb.Rows.Add(dr);
          
            GridView1.DataSource = tb;
            GridView1.DataBind();
        }改成这样好象可以