Pase ASP.Net GridView de una página a otra página

Pase ASP.Net GridView de una página a otra página

Intente usar variables de sesión. Puede configurar GridView en una variable de sesión que luego se puede recuperar más tarde, siempre que la misma sesión siga activa.

Puede usar el siguiente código para configurar la variable de sesión en su primera página:

Session["gvDoctorList"] = gvDoctorList;

Y luego recuperar de la variable en su segunda página:

GridView gvDoctorList = (GridView)Session["gvDoctorList"];

Para obtener más información sobre las sesiones, consulte Descripción general del estado de la sesión de MSDN.


Como también he visto su pregunta anterior, puedo sugerirle una cosa, en lugar de mantener su vista de cuadrícula en sesión (lo cual es costoso), puede usar RowCommand evento, y después de tener button aquí no creo que necesites checkbox o chk_CheckedChanged evento, puede pasar el PatientID a su página siguiente allí puede escribir una consulta para insertar datos de fila seleccionados en su nueva tabla.

 <asp:TemplateField>
       <ItemTemplate>
        <asp:CheckBox runat="server" ID="chk" OnCheckedChanged="chk_CheckedChanged"  
         AutoPostBack="true" />
        <asp:Label runat="server" ID="lblPID" Visible="false" Text='<%# Eval("PatientId") %>'> 
       </asp:Label>
      <asp:Button ID="btnSelect" runat="server" Text="Select" CommandArgument='<%# 
       Eval("PatientId") %>' CommandName = "Select" />
      </ItemTemplate>
    </asp:TemplateField>



 protected void gvDoctorList_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "select")
            {
                int pID = Convert.ToInt32(e.CommandArgument);
                // either put ID in session and check 
                Session["PatientID"] = Convert.ToString(pID);
                Server.Transfer("Patientstaticformatrix.aspx");
            }
        }

En la página_Cargar evento

 protected void Page_Load(object sender, EventArgs e)
    {
         string pID = Convert.ToString(Session["PatientID"]);
            if(!string.IsNullOrEmpty(pID))
            {
              int patientID = Convert.ToInt32(pID);
             //Call Stored procedure which will insert this record with this ID
             // to another table
            }    

    }

Decidí agregar una segunda respuesta basada en los comentarios correctos de Ahmed. Las variables de sesión realmente no deberían contener la cantidad de datos de la vista de cuadrícula debido a problemas de memoria.

Lo siguiente debería funcionar en consecuencia para lo que supongo que está haciendo:

Esencialmente, cuando selecciona la fila para ir a la página siguiente, está tratando de recuperar los datos de esa fila en la nueva página. ¿Es correcta esta suposición? Si es así, tiene varias opciones para usar.

Nuevamente, podría usar las Variables de sesión para almacenar los datos de la fila una vez extraídos en la primera página:

protected void btnformatric_Click(object sender, EventArgs e) {
    if (gvDoctorList.SelectedRow != null) {

        GridViewRow selectedRow = gvDoctorList.SelectedRow;

        Session["PatientId"] = selectedRow.Cells[0].Text;
        Session["firstname"] = selectedRow.Cells[1].Text;
        Session["lastname"] = selectedRow.Cells[2].Text;

        Server.Transfer("Patientstaticformatrix.aspx");
    } else {
        ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Please select a row.')", true);
    }
}

Esencialmente, aquí está en la primera página y obtiene los datos de la fila. Luego almacena estos datos en variables de sesión y puede usar lo siguiente para encontrar los datos de la página siguiente:

protected void Page_Load(object sender, EventArgs e) {
    if (this.Page.PreviousPage != null) {
        //Retrieve values from Session Variables
        Response.Write("PatientId: " + Session["PatientId"].ToString() + "<br />");
        Response.Write("firstname: " + Session["firstname"].ToString() + "<br />");
        Response.Write("lastname: " + Session["lastname"].ToString() + "<br />");
    }
}

También tiene una segunda opción de usar Query Strings para pasar los datos. Aunque para este método creo que tendrás que cambiar el Server.Transfer("Patientstaticformatrix.aspx"); ser Response.Redirect("Patientstaticformatrix.aspx");

A continuación se muestra un ejemplo sobre el uso de cadenas de consulta:

protected void btnformatric_Click(object sender, EventArgs e) {
    if (gvDoctorList.SelectedRow != null) {
        GridViewRow selectedRow = gvDoctorList.SelectedRow;
        //Create URL with Query strings to redirect to new page
        Response.Redirect("Patientstaticformatrix.aspx?parentid=" + selectedRow.Cells[0].Text + "&firstname=" + selectedRow.Cells[1].Text + "&lastname=" + selectedRow.Cells[2].Text);
    } else {
        ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Please select a row.')", true);
    }
}

Y para recuperar los valores del Request.QueryString objeto en la segunda página.

protected void Page_Load(object sender, EventArgs e) {
    if (this.Page.PreviousPage != null) {
        //Retrieve values from Query Strings
        Response.Write("PatientId: " + Request.QueryString["parentid"].ToString() + "<br />");
        Response.Write("firstname: " + Request.QueryString["firstname"].ToString() + "<br />");
        Response.Write("lastname: " + Request.QueryString["lastname"].ToString() + "<br />");
    }
}

Ambas soluciones deberían cumplir con sus requisitos, sin embargo, ambas son ligeramente diferentes. El Session Variable La solución es probablemente el método preferido, ya que evitará que los usuarios puedan ver todos los datos pasados ​​(si necesita pasar información confidencial), mientras que los valores de la cadena de consulta estarán disponibles para cualquiera que pueda ver la URL.

Para obtener más información sobre variables de sesión y cadenas de consulta, consulte los siguientes recursos:

Descripción general del estado de sesión de ASP.NET

Colección Request.QueryString