Getting exception while deleting rows from gridview
<p>I want to delete selected rows from gridview for this I have written the below code but getting exception: </p>

<p><strong>An unhandled exception of type 'System.StackOverflowException' occurred in System.Web.dll</strong></p>

<p>Here is my aspx.page:</p>

<pre><code>&lt;asp:gridview ID="Gridview1" runat="server" ShowFooter="true" 
        onrowcommand="Gridview1_RowCommand"  AutoGenerateColumns="false" 
        CellSpacing="0" CellPadding="0" Font-Bold="false" 
        onrowdeleting="Gridview1_RowDeleting"&gt;
    &lt;Columns&gt;
  &lt;asp:TemplateField HeaderText="Select" ControlStyle-Width="50px" HeaderStyle-Font-Bold="false" ControlStyle-Font-Bold="false"&gt;
 &lt;ItemTemplate&gt;         
     &lt;asp:CheckBox ID="chkSelect" runat="server" Width="80px"/&gt;
 &lt;/ItemTemplate&gt;
</code></pre>

<p>
        
            
                
            <br>
            
                
            <br>
        
        
            
                
            <br>
            
                
              </p>

<pre><code>    &lt;/asp:TemplateField&gt;
    &lt;asp:TemplateField HeaderText="Header 3" HeaderStyle-Font-Bold="false" ControlStyle-Font-Bold="false"&gt;
        &lt;ItemTemplate&gt;
             &lt;asp:TextBox ID="TextBox3" Width="70px" 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" CommandName="AddNewRow" /&gt;
        &lt;asp:Button  ID="btnDelete" runat="server" CommandName="DeleteRow" Text="Delete"         
        OnClientClick="return DeleteConfirmation();"/&gt; 
        &lt;/FooterTemplate&gt;
    &lt;/asp:TemplateField&gt;
    &lt;/Columns&gt;
</code></pre>

<p>   </p>

<p>Here is my code behind:</p>

<pre><code> public partial class _Default : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {
    if (!Page.IsPostBack)
    {
        SetInitialRow();
    }

}

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 rowIndex = 0;

    if (ViewState["CurrentTable"] != null)
    {
        DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
        DataRow drCurrentRow = null;
        if (dtCurrentTable.Rows.Count &gt; 0)
        {
            for (int i = 1; i &lt;= dtCurrentTable.Rows.Count; i++)
            {
                //extract the TextBox values
                TextBox box1 =  (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                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;

                rowIndex++;
            }
            //add new row to DataTable
            dtCurrentTable.Rows.Add(drCurrentRow);
            //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");
    }

    //Set Previous Data on Postbacks
    SetPreviousData();
}


private void SetPreviousData()
{
    int rowIndex = 0;
    if (ViewState["CurrentTable"] != null)
    {
        DataTable dt = (DataTable)ViewState["CurrentTable"];
        if (dt.Rows.Count &gt; 0)
        {
            for (int i = 1; i &lt; dt.Rows.Count; i++)
            {
                TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                box1.Text = dt.Rows[i]["Column1"].ToString();
                box2.Text = dt.Rows[i]["Column2"].ToString();
                box3.Text = dt.Rows[i]["Column3"].ToString();

                rowIndex++;

            }
        }
    }
}
protected void Gridview1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "AddNewRow")
    {
        AddNewRowToGrid();          
    }

    if (e.CommandName == "DeleteRow")
    {
  for (int i = 0; i &lt; Gridview1.Rows.Count; i++)
        {
            CheckBox chkDelete = (CheckBox)
               Gridview1.Rows[i].Cells[0].FindControl("chkSelect");
            if (chkDelete != null)
            {
                if (chkDelete.Checked)
                {
                    //strID = GridView1.Rows[i].Cells[1].Text;
                    //idCollection.Add(strID);
                    Gridview1.DeleteRow(i);
                }
            }

        }


    }
    Gridview1.DataBind();

}
   protected void Gridview1_RowDeleting(object sender, GridViewDeleteEventArgs e)
   {
       for (int i = 0; i &lt; Gridview1.Rows.Count; i++)
        {
            CheckBox chkDelete = (CheckBox)
               Gridview1.Rows[i].Cells[0].FindControl("chkSelect");
            if (chkDelete != null)
            {
                if (chkDelete.Checked)
                {
                    //strID = GridView1.Rows[i].Cells[1].Text;
                    //idCollection.Add(strID);
                    Gridview1.DeleteRow(i);
                }
            }

        }
       Gridview1.DataBind();       

}
</code></pre>

<p>}</p>

<p><strong>In my above code if any logical mistake there, pls help me modify it.</strong> </p>
