Übergeben Sie ASP.Net GridView von einer Seite an eine andere Seite

Übergeben Sie ASP.Net GridView von einer Seite an eine andere Seite

Versuchen Sie es mit Sitzungsvariablen. Sie können die GridView in eine Sitzungsvariable setzen, die dann später abgerufen werden kann, solange dieselbe Sitzung noch aktiv ist.

Sie können den folgenden Code verwenden, um die Sitzungsvariable auf Ihrer ersten Seite festzulegen:

Session["gvDoctorList"] = gvDoctorList;

Und dann, um von der Variablen auf Ihrer zweiten Seite abzurufen:

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

Weitere Informationen zu Sitzungen finden Sie in der Übersicht über den MSDN-Sitzungsstatus.


Wie ich auch Ihre vorherige Frage gesehen habe, kann ich Ihnen eine Sache vorschlagen, anstatt Ihre Gridview in Sitzung zu halten (was teuer ist), können Sie RowCommand verwenden Ereignis und nach button Hier glaube ich nicht, dass Sie ein Kontrollkästchen oder chk_CheckedChanged benötigen Ereignis können Sie den PatientID übergeben Auf Ihrer nächsten Seite können Sie dort eine Abfrage schreiben, um ausgewählte Zeilendaten in Ihre neue Tabelle einzufügen.

 <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");
            }
        }

Auf page_Load Event

 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
            }    

    }

Ich habe mich entschieden, basierend auf den korrekten Kommentaren von Ahmed eine zweite Antwort hinzuzufügen. Die Sitzungsvariablen sollten aufgrund von Speicherproblemen wirklich nicht die Datenmenge der Gridview enthalten.

Das Folgende sollte entsprechend für das funktionieren, was Sie meiner Meinung nach tun:

Wenn Sie die Zeile auswählen, um zur nächsten Seite zu wechseln, versuchen Sie im Wesentlichen, die Daten dieser Zeile auf der neuen Seite abzurufen. Ist diese Annahme richtig? Wenn ja, dann haben Sie eine Reihe von Optionen, die Sie verwenden können.

Auch hier könnten Sie die Sitzungsvariablen verwenden, um die Daten der einmal extrahierten Zeile auf der ersten Seite zu speichern:

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);
    }
}

Im Wesentlichen befinden Sie sich hier auf der ersten Seite und erhalten die Daten aus der Zeile. Sie speichern diese Daten dann in Sitzungsvariablen und können Folgendes verwenden, um die Daten auf der nächsten Seite zu finden:

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 />");
    }
}

Sie haben auch eine zweite Möglichkeit, Abfragezeichenfolgen zu verwenden, um die Daten zu übergeben. Obwohl ich glaube, dass Sie für diese Methode den Server.Transfer("Patientstaticformatrix.aspx"); ändern müssen Response.Redirect("Patientstaticformatrix.aspx"); sein

Nachfolgend finden Sie ein Beispiel zur Verwendung von Abfragezeichenfolgen:

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);
    }
}

Und um die Werte aus Request.QueryString abzurufen Objekt auf der zweiten Seite.

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 />");
    }
}

Beide Lösungen sollten Ihre Anforderungen erfüllen, unterscheiden sich jedoch geringfügig. Die Session Variable Lösung ist wahrscheinlich die bevorzugte Methode, da sie verhindert, dass Benutzer alle übergebenen Daten sehen können (wenn Sie vertrauliche Informationen weitergeben müssen), während die Abfragezeichenfolgenwerte für jeden verfügbar sind, der die URL sehen kann.

Weitere Informationen zu Sitzungsvariablen und Abfragezeichenfolgen finden Sie in den folgenden Ressourcen:

Übersicht über den ASP.NET-Sitzungsstatus

Request.QueryString-Sammlung