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

Ich möchte den gesamten gridview-Wert an eine andere Seite übergeben

     <asp:Label runat="server" ID="lblPID" Visible="false" Text=''>          <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="" SelectCommand="SELECT [PatientId],[firstname], [lastname], [sex] FROM [PatientDetails]">  

auf codebehind von PatientDetails.aspx ist wie folgt

 protected void btnformatric_Click(object sender, EventArgs e) { if (gvDoctorList.SelectedRow != null) { Server.Transfer("Patientstaticformatrix.aspx"); } else { ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Please select a row.')", true); } } 

Auf dem zweiten Seitennamen Patientstaticformatrix.aspx ist der Code dahinter wie folgt

 protected void Page_Load(object sender, EventArgs e) { if (this.Page.PreviousPage != null) { GridView gvDoctorList = (GridView)this.Page.PreviousPage.FindControl("gvDoctorList"); GridViewRow selectedRow = gvDoctorList.SelectedRow; Response.Write("PatientId: " + selectedRow.Cells[0].Text + "
"); Response.Write("firstname: " + selectedRow.Cells[1].Text + "
"); Response.Write("lastname: " + selectedRow.Cells[2].Text + "
"); } }

Ich hatte den Code auf der zweiten Seite debuggen. Der Wert für gvDoctorList ist null, ebenso wie die selectedRow einen Fehler der Nullreferenz.

Können Sie mir bitte sagen, wo ich mich irre?

Wie ich auch Ihre vorherige Frage gesehen habe, kann ich Ihnen eine Sache vorschlagen, anstatt Ihr Gridview in Sitzung zu halten (was teuer ist), können Sie das RowCommand Ereignis verwenden, und nachdem Sie den button hier haben, glaube ich nicht, dass Sie ein Kontrollkästchen oder chk_CheckedChanged benötigen In diesem Fall können Sie die PatientID an Ihre nächste Seite übergeben. Dort können Sie eine Abfrage schreiben, um ausgewählte Zeilendaten in Ihre neue Tabelle einzufügen.

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

Bei page_Load-Ereignis

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

Versuchen Sie es mit Sitzungsvariablen. Sie können GridView in eine Session-Variable setzen, die später wieder abgerufen werden kann, solange die gleiche 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 die Variable auf Ihrer zweiten Seite zu lesen:

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

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

Ich habe mich entschlossen, eine zweite Antwort auf der Grundlage der korrekten Kommentare von Ahmed hinzuzufügen.

Folgendes sollte für das, was ich vermute, entsprechend funktionieren:

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

Sie können wieder die Sitzungsvariablen verwenden, um die Daten der Zeile zu speichern, sobald sie auf der ersten Seite extrahiert wurden:

 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 sind Sie hier auf der ersten Seite und Sie erhalten die Daten aus der Zeile. Sie speichern diese Daten dann in Sitzungsvariablen und können auf folgende Weise die Daten auf der nächsten Seite 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() + "
"); Response.Write("firstname: " + Session["firstname"].ToString() + "
"); Response.Write("lastname: " + Session["lastname"].ToString() + "
"); } }

Sie haben auch eine zweite Möglichkeit, Query Strings zum Übergeben der Daten zu verwenden. Ich glaube, für diese Methode müssen Sie den Server.Transfer("Patientstaticformatrix.aspx"); ändern Server.Transfer("Patientstaticformatrix.aspx"); Response.Redirect("Patientstaticformatrix.aspx");

Im Folgenden finden Sie ein Beispiel für die 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 dem Request.QueryString Objekt auf der zweiten Seite abzurufen.

 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() + "
"); Response.Write("firstname: " + Request.QueryString["firstname"].ToString() + "
"); Response.Write("lastname: " + Request.QueryString["lastname"].ToString() + "
"); } }

Beide Lösungen sollten Ihren Anforderungen entsprechen, unterscheiden sich jedoch leicht. Die Lösung für die Session Variable ist wahrscheinlich die bevorzugte Methode, da dadurch verhindert wird, dass Benutzer alle übergebenen Daten anzeigen können (wenn Sie vertrauliche Informationen übergeben müssen), wobei die Werte der Abfragezeichenfolge für jeden verfügbar sind, der die URL sehen kann.

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

Überblick über den ASP.NET-Sitzungsstatus

Request.QueryString-Auflistung

Die Antwort von @Nunners ist eigen, kann aber auch auf folgende Weise versucht werden:

Auf einer anderen Seite zum Laden einer Seite laden Sie ein Raster ab wie:

 GridView GridView1 = (GridView)this.Page.PreviousPage.FindControl("GridView1"); 

Die gesamte Technik ist unten angegeben:

http://www.aspsnippets.com/Articles/Pass-Selected-Row-of-ASPNet-GridView-control-to-another-Page.aspx

Siehe obenes Dokument.

Die eigentliche Antwort ist, dass Sie dieselbe Rasteransicht auf einer anderen Seite erstellen sollten. Auf diese Weise funktionieren 99% der ASP.NET-Sites, da diese Seite zu einem bestimmten Zeitpunkt Daten schreibt, aktualisiert oder löscht. Oder verwenden Sie einfach dieselbe Seite – Warum redirect, um dieselben Daten anzuzeigen?