Dans l'essai d'étude précédent, nous pouvons utiliser DataKeyNames et DataKeys pour effectuer un accès aux données sur la colonne de clé primaire GridView. Dans des expériences ultérieures, j'ai découvert que nous pouvions utiliser TemplateField pour obtenir d'autres accès aux données
.
<Modèle d'élément>
<asp:Literal id="litUserName" runat="Server" Text='<%#Eval("UserName")%>'/>
</ItemTemplate>
</asp:TemplateField>
//Implémentation backend
String userName = ((Literal)GridView1.SelectedRow.FindControl("litUserName")).Text;
La propriété AutoGenerateSelectButton de GridView peut directement activer la sélection de table. Si nous ne souhaitons pas ajouter de colonne supplémentaire pour la sélection, nous pouvons utiliser TemplateField pour implémenter la sélection GridView.
Le code ASP.NET est le suivant :
<asp:BoundField DataField="ObjectID. " HeaderText="ID"/>
<asp:TemplateField>
<Modèle d'en-tête>
Nom
</HeaderTemplate>
<Modèle d'élément>
<asp:LinkButton id="lbName" runat="Server" CommandName="Select">
<%#Eval("Nom")%>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Status" HeaderText="Status"/>
Dans le même temps, nous devons ajouter deux gestionnaires d'événements à GridView : RowCreated et RowCommand.
//Gestion des événements RowCreated
void GridView1_RowCreated (expéditeur de l'objet, GridViewRowEventArgs e)
{
si (e.Row.RowType == DataControlRowType.DataRow)
{ ((LinkButton)e.Row.FindControl("lbName").CommandArgument = e.Row.RowIndex.ToString();
}
}
//Gestion des événements RowCommand
void GridView1_RowCommand (source de l'objet, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
GridView1.SelectedIndex = int.Parse(e.CommandArgument.ToString());
}
De cette façon, vous pouvez sélectionner en même temps lorsque vous cliquez sur le nom, sans avoir à utiliser la colonne de sélection.