I am having issue with my gridview
- It is giving me error while moving from one page to another
- It is not retaining checkbox state on paging
Getting error on KeepChecks
ERROR MESSAGE Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index ERROR MESSAGE
Below is the code...
Your help and assistance will be appriciated
 public partial class AdminConsole : System.Web.UI.Page
{
    SqlDataAdapter da;
    DataSet ds = new DataSet();
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString());
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindData();
        }
    }
    private string GetConnectionString()
    {
        return System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
    }
    private void BindData()
    {
        SqlCommand cmd = new SqlCommand("SELECT UserID, EmployeeID, UserName, Dept FROM vw_UserID_Dept", con);
        try
        {
            da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            //GVRegisterNewCarton.DataSource = ds;
            //GVRegisterNewCarton.DataBind();
         if (!object.Equals(ds.Tables[0], null))
        {
            if (ds.Tables[0].Rows.Count > 0)
            {
                GVRegisterNewCarton.DataSource = ds.Tables[0];
                GVRegisterNewCarton.DataBind();
                Session["MyTable"] = ds.Tables[0];
            }
            else
            {
                GVRegisterNewCarton.DataSource = null;
                GVRegisterNewCarton.DataBind();
            }
        }
        else
        {
            GVRegisterNewCarton.DataSource = null;
            GVRegisterNewCarton.DataBind();
        }
    }
    catch (Exception ex)
    {
        Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Script", "alert('Error Binding Grid');", true);
        lblStatus.Text = ex.Message;
    }
    }
    protected void GVRegisterNewCarton_PageChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            KeepChecks();
            GVRegisterNewCarton.PageIndex = e.NewPageIndex;
            BindData();
            ApplyChecks();
        }
        catch (Exception ex)
        {
            Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Script", "alert('Error Binding Grid');", true);
            lblStatus.Text = ex.Message;
        }
    }
    private void KeepChecks()
{
    try
    {
        ArrayList chkList = new ArrayList();
        int index = -1;
        foreach (GridViewRow gvrow in GVRegisterNewCarton.Rows)
        {
            index = (int)GVRegisterNewCarton.DataKeys[gvrow.RowIndex].Value;
            bool result = ((CheckBox)gvrow.FindControl("chkSelectAdd")).Checked;
            if (Session["RemindChecks"] != null)
                chkList = (ArrayList)Session["RemindChecks"];
            if (result)
            {
                if (!chkList.Contains(index))
                    chkList.Add(index);
            }
            else
                chkList.Remove(index);
        }
        if (chkList != null && chkList.Count > 0)
            Session["RemindChecks"] = chkList;
    }
    catch (Exception ex)
    {
        Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Script", "alert('Error Binding Grid');", true);
        lblStatus.Text = ex.Message;
    }
}
private void ApplyChecks()
{
    try
    {
        ArrayList chkList = (ArrayList)Session["RemindChecks"];
        if (chkList != null && chkList.Count > 0)
        {
            foreach (GridViewRow gvrow in GVRegisterNewCarton.Rows)
            {
                int index = (int)GVRegisterNewCarton.DataKeys[gvrow.RowIndex].Value;
                if (chkList.Contains(index))
                {
                    CheckBox myCheckBox = (CheckBox)gvrow.FindControl("chkSelectAdd");
                    myCheckBox.Checked = true;
                }
            }
        }
    }
    catch (Exception ex)
    {
        Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Script", "alert('Error Binding Grid');", true);
        lblStatus.Text = ex.Message;
    }
}
 
    