title: Gridview always add new row when click button?
body: <p>I'm write the code which create new row in gridview when click button. The number of rows are created by value in textbox. Ex: When i enter value 2 in textbox, of course two rows will be added, but when i clicked button again, third rows still added. Please check my code here:</p>
  
  <p><strong>ASPX</strong></p>
  
  <pre><code>&lt;asp:TextBox ID="txtVisitor" runat="server"&gt;&lt;/asp:TextBox&gt;
  &lt;asp:UpdatePanel ID="UpdatePanel1" runat="server"&gt;
      &lt;ContentTemplate&gt;
          &lt;asp:GridView ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false"&gt;
              &lt;Columns&gt;
                  &lt;asp:BoundField DataField="RowNumber" HeaderText="Row Number" /&gt;
                  &lt;asp:TemplateField HeaderText="Header 1"&gt;
                      &lt;ItemTemplate&gt;
                          &lt;asp:TextBox ID="txtDate" runat="server"&gt;&lt;/asp:TextBox&gt;
                      &lt;/ItemTemplate&gt;
                  &lt;/asp:TemplateField&gt;
                  &lt;asp:TemplateField HeaderText="Header 2"&gt;
                      &lt;ItemTemplate&gt;
                          &lt;asp:TextBox ID="TextBox2" runat="server"&gt;&lt;/asp:TextBox&gt;
                      &lt;/ItemTemplate&gt;
                  &lt;/asp:TemplateField&gt;
                  &lt;asp:TemplateField HeaderText="Header 3"&gt;
                      &lt;ItemTemplate&gt;
                          &lt;asp:TextBox ID="TextBox3" runat="server"&gt;&lt;/asp:TextBox&gt;
                      &lt;/ItemTemplate&gt;
                      &lt;FooterStyle HorizontalAlign="Right" /&gt;
                      &lt;FooterTemplate&gt;
                          &lt;asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" /&gt;
                      &lt;/FooterTemplate&gt;
                  &lt;/asp:TemplateField&gt;
              &lt;/Columns&gt;
          &lt;/asp:GridView&gt;
      &lt;/ContentTemplate&gt;
  &lt;/asp:UpdatePanel&gt;
  </code></pre>
  
  <p>Code_Behind</p>
  
  <pre><code>protected void ButtonAdd_Click(object sender, EventArgs e)
  {
      int visitors = Convert.ToInt32(txtVisitor.Text);
      AddNewRowToGrid(visitors);
  }
  
  private void SetInitialRow()
  {
      DataTable dt = new DataTable();
      DataRow dr = null;
      dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
      dt.Columns.Add(new DataColumn("Column1", typeof(string)));
      dt.Columns.Add(new DataColumn("Column2", typeof(string)));
      dt.Columns.Add(new DataColumn("Column3", typeof(string)));
      dr = dt.NewRow();
      dr["RowNumber"] = 1;
      dr["Column1"] = string.Empty;
      dr["Column2"] = string.Empty;
      dr["Column3"] = string.Empty;
      dt.Rows.Add(dr);
      //dr = dt.NewRow();
  
      //Store the DataTable in ViewState
      ViewState["CurrentTable"] = dt;
  
      Gridview1.DataSource = dt;
      Gridview1.DataBind();
  }
  
  private void AddNewRowToGrid(int visitors)
  {
      if (ViewState["CurrentTable"] != null)
      {
          DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
          DataRow drCurrentRow;
          if (dtCurrentTable.Rows.Count &gt; 0)
          {
              int rowindex = 0;
  
              for (int i = 1; i &lt; visitors; i++)
              {
                  //extract the TextBox values
                  TextBox box1 = (TextBox)Gridview1.Rows[rowindex].Cells[1].FindControl("txtDate");
                  TextBox box2 = (TextBox)Gridview1.Rows[rowindex].Cells[2].FindControl("TextBox2");
                  TextBox box3 = (TextBox)Gridview1.Rows[rowindex].Cells[3].FindControl("TextBox3");
  
                  drCurrentRow = dtCurrentTable.NewRow();
                  drCurrentRow["RowNumber"] = i + 1;
                  drCurrentRow["Column1"] = box1.Text;
                  drCurrentRow["Column2"] = box2.Text;
                  drCurrentRow["Column3"] = box3.Text;
                  dtCurrentTable.Rows.Add(drCurrentRow);
                  drCurrentRow = null;
                  rowindex++;
              }
              //add new row to DataTable
  
              //Store the current data to ViewState
              ViewState["CurrentTable"] = dtCurrentTable;
  
              //Rebind the Grid with the current data
              Gridview1.DataSource = dtCurrentTable;
              Gridview1.DataBind();
          }
      }
      else
      {
          Response.Write("ViewState is null");
      }
  }
  
  protected void Page_Load(object sender, EventArgs e)
  {
      if (!IsPostBack)
      {
          SetInitialRow();
      }
  }
  </code></pre>