Passer ASP.Net GridView d'une page à une autre page
Je veux passer tous les gridview valeur dans une autre page
J'ai un gridview dans PatientDetails.page aspx et un bouton comme ci-dessous
<asp:GridView ID="gvDoctorList" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"
AllowPaging="True" AllowSorting="True" AutoGenerateEditButton="true" AutoGenerateSelectButton="true"
AutoGenerateDeleteButton="true" OnSelectedIndexChanged="gvDoctorList_SelectedIndexChanged" OnRowCommand="gvDoctorList_RowCommand">
<Columns>
<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" CommandName = "Select" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="PatientId" HeaderText="PatientId" SortExpression="PatientId" />
<asp:BoundField DataField="firstname" HeaderText="firstname" SortExpression="firstname" />
<asp:BoundField DataField="lastname" HeaderText="lastname" SortExpression="lastname" />
<asp:BoundField DataField="sex" HeaderText="sex" SortExpression="sex" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyDatabaseConnectionString %>"
SelectCommand="SELECT [PatientId],[firstname], [lastname], [sex] FROM [PatientDetails]"></asp:SqlDataSource>
<asp:Button ID="btnformatric" runat="server" Text="formatric3d" OnClick="btnformatric_Click" OnCommand="btnformatric_Command" />
sur le code-behind de PatientDetails.aspx est comme ci-dessous
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);
}
}
Maintenant sur le deuxième nom de la page Patientstaticformatrix.aspx le code derrière est comme ci-dessous
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 + "<br />");
Response.Write("firstname: " + selectedRow.Cells[1].Text + "<br />");
Response.Write("lastname: " + selectedRow.Cells[2].Text + "<br />");
}
}
J'avais déboguer le code de la deuxième page....la valeur de gvDoctorList est nulle ainsi que le selectedRow montre l'erreur de nullreference.
Pouvez-vous s'il vous plaît laissez-moi où je me trompe?
pourquoi u ne souhaitez transférer le contrôle d'un simple choix d'accéder à des données qui a été lié à la grille.
je veux le patientid valeur dans la page d'un autre, rien d'autre....et souhaitez insérer la patientid et l'image de patient dans la deuxième page
je veux le patientid valeur dans la page d'un autre, rien d'autre....et souhaitez insérer la patientid et l'image de patient dans la deuxième page
OriginalL'auteur Pratik | 2013-10-09
Vous devez vous connecter pour publier un commentaire.
Que j'ai vu votre question précédente aussi, je peux vous suggérer une chose, plutôt que de garder votre gridview dans la session(qui est cher), vous pouvez utiliser
RowCommand
cas, et après avoirbutton
ici, je ne pense pas que vous avez besoin de case à cocher ouchk_CheckedChanged
événement, vous pouvez passer à laPatientID
pour votre prochaine page, vous pouvez écrire la requête pour insérer une ligne sélectionnée de données à votre nouvelle table.Sur l'Événement page_Load
quel est le type de données de
PatientId
?patientid est de type int ainsi que autoincrement dans sql server
Est PatientID unique ?Et cette erreur signifie
PatientID
ne peut pas être convertie dans le type Int.Vérifier les mises à jour de réponse, mais ne l'utilisez que si PatientId est unique ou avez-vous une clé primaire ?Avez-vous mis
CommandArgument
dans votre gridview comme ici<asp:Button ID="btnSelect" runat="server" Text="Select" CommandArgument='<%# Eval("PatientId") %>' CommandName = "Select" />
OriginalL'auteur Suraj Singh
Essayez d'utiliser des Variables de Session. Vous pouvez définir le contrôle GridView dans une variable de Session qui peut ensuite être récupéré plus tard aussi longtemps que la même session est toujours actif.
Vous pouvez utiliser le code suivant pour définir la Variable de Session sur votre première page :
Et ensuite de les retrouver à partir de la variable sur votre deuxième page :
Pour plus d'informations sur les Sessions de voir le MSDN Aperçu de l'État de Session.
dois-je mettre de la session dans la case changement de l'événement ou quelque part d'autre?
Vous pouvez définir la variable de session où vous le souhaitez, mais je n'irais pas jusqu'à ce que vous avez besoin. Comme ce qui suit dans votre
btnformatric_Click
:Session["gvDoctorList"] = gvDoctorList; Server.Transfer("Patientstaticformatrix.aspx");
. De cette façon, vous n'êtes pas en utilisant l'espace de la mémoire jusqu'à ce que vous avez besoin.Je ne peut pas diriger obtenir le contrôle gridview gvDoctorList dans la session....cela signifie que je dois d'abord définir la boucle de contrôle gridview puis à l'intérieur que j'ai besoin de régler la valeur de session...qu'en pensez-vous?
downvoted. une mauvaise pratique. trop grand d'un objet à tenir dans la session en termes de consommation de la mémoire et de la performance. vous ne devriez jamais faire ce genre de choses (même si elle fonctionne). vous allez subir un grand succès.
OriginalL'auteur Nunners
J'ai décidé d'ajouter une deuxième réponse repose sur le bon commentaires d'Ahmed, Les variables de session ne devrait pas détenir la quantité de données de la gridview en raison de problèmes de mémoire.
Suivantes devraient travailler en conséquence pour ce que je suppose que vous faites :
Essentiellement lorsque vous sélectionnez la ligne pour aller à la prochaine page que vous essayez de récupérer les données de la ligne sur la nouvelle page. Cette Hypothèse est correcte? Si oui, alors vous avez un certain nombre d'options pour vous à utiliser.
De nouveau, vous pouvez utiliser les Variables de Session pour stocker les données de la ligne une fois extrait de la première page :
Essentiellement ici, vous êtes sur la première page et vous obtenez les données de la ligne. Vous ensuite stocker ces données dans des variables de session et vous pouvez utiliser les méthodes suivantes pour trouver les données de la page suivante :
Vous avez également une deuxième option de l'utilisation de Chaînes de Requête pour transmettre les données. Bien que, pour cette méthode, je crois que vous aurez à changer le
Server.Transfer("Patientstaticformatrix.aspx");
êtreResponse.Redirect("Patientstaticformatrix.aspx");
Ci-dessous est un exemple sur l'utilisation de Chaînes de Requête :
Et récupérer les valeurs de la
Request.QueryString
objet sur la deuxième page.Deux de ces solutions devrait répondre à vos exigences, mais ils sont à la fois légèrement différent. Le
Session Variable
solution est probablement la méthode préférée car elle va empêcher les utilisateurs d'être en mesure de voir toutes les données transmises (si vous avez besoin de transmettre de l'information confidentielle) où les valeurs de Chaîne de Requête sera disponible pour n'importe qui qui peut voir l'URL.Pour plus d'informations sur les Variables de Session et les Chaînes de Requête, voir les ressources ci-dessous :
ASP.NET vue d'ensemble de l'État de Session
Demande.Collection QueryString
OriginalL'auteur Nunners
@Nunners réponse est ownsome, mais peut aussi essayer avec de la manière suivante:
sur anothoer la page de l'événement pageload extraire de la grille comme:
Toute la technique est donnée ci-dessous:
http://www.aspsnippets.com/Articles/Pass-Selected-Row-of-ASPNet-GridView-control-to-another-Page.aspx
Reportez-vous au-dessus de doccument.
voir ce rajudasa.blogspot.dans/2011/08/...
j'ai essayer mais cela ne fonctionne pas pour moi....u ne ont aucune autre possibilité?
Le problème serait, si la page est déplacée dans une masterpage ou usercontrol? cela ne fonctionnera pas.
oui ahmed, vous avez raison, j'ai deux page à l'intérieur de la page principale....donc, je m d'essayer votre solution de rowcommand...Espérons qu'il fonctionne bien
OriginalL'auteur C Sharper
La vraie réponse est que vous devez créer le même gridview sur une autre page. C'est de cette façon 99% des ASP.NET sites de travail depuis cette page à un certain point de la rédaction/mise à jour/suppression de données. Ou tout simplement utiliser la même page - pourquoi rediriger pour afficher les mêmes données?
alors pourquoi ne pas le faire sur la même page? 🙂
j'ai configurer la caméra dans l'autre page, de sorte que la raison pour laquelle, il n'est pas possible sur une même page
Je vois. Eh bien, c'est simple. L'essentiel sur cette page qui a la grille, laissez entrer/mise à jour des détails et puis de faire appel à la DB qui va vous redonner un ID sur le succès, de prendre que l'ID de l'enregistrement et de le passer à la page suivante pour faire la camera shot puis quand confirmé, mise à jour de la table à l'aide de cette image avec le recordID.
OriginalL'auteur Ahmed ilyas