Je lie le bouton de lien avec les données de titre dans aspgridview et lie également l'étiquette cachée qui contient la valeur ID. lorsque l'utilisateur clique sur ce bouton de lien, je souhaite accéder à la valeur ID. J'ai besoin de cela parce que, si l'utilisateur se connecte, seule la fenêtre de détail contextuelle affiche un message d'alerte pour se connecter pour plus de détails.
dans l'événement lnkTitle_Click () J'essaie d'accéder à la ligne sélectionnée pour trouver le contrôle d'étiquette.
GridViewRow grdSelRow = GridView1.SelectedRow;
Label lblID = (Label)grdSelRow.FindControl("lblID");
Mais je reçois grdSelRow comme null.
Comment obtenir la ligne sélectionnée en cliquant sur le bouton de lien de gridview?
Le problème est que lorsque vous cliquez sur un bouton dans un GridView, la ligne sera uniquement une ligne cliquée et non un SelectedRow
. Si vous voulez en faire la ligne sélectionnée, vous devez spécifier CommandName="Select"
dans le balisage du bouton.
Voici deux méthodes pour répondre à vos besoins.
Câblage d'un événement onclick pour le LinkButton dans ItemTemplate
Markup
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server"
Text="Click1"
OnClick="LinkButton1_Click"/>
</ItemTemplate>
</asp:TemplateField>
Code-behind
protected void LinkButton1_Click(object sender, EventArgs e)
{
GridViewRow clickedRow = ((LinkButton) sender).NamingContainer as GridViewRow;
Label lblID = (Label)clickedRow.FindControl("lblID");
}
Utilisation de RowCommand pour intercepter le clic LinkButton.
Markup
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton2" runat="server"
Text="Click2"
CommandName="MyCustomCommand"/>
</ItemTemplate>
</asp:TemplateField>
Code-behind
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if(e.CommandName.Equals("MyCustomCommand"))
{
GridViewRow clickedRow = ((LinkButton)e.CommandSource).NamingContainer as GridViewRow;
Label lblID = (Label)clickedRow.FindControl("lblID");
}
}