En
experimentos posteriores, descubrí que podemos usar TemplateField para lograr otros accesos a datos.
<Plantilla de artículo>
<asp:Literal id="litUserName" runat="Servidor" Text='<%#Eval("UserName")%>'/>
</ItemTemplate>
</asp:TemplateField>
//Implementación de backend
String userName = ((Literal)GridView1.SelectedRow.FindControl("litUserName")).Text;
La propiedad AutoGenerateSelectButton de GridView puede habilitar directamente la selección de tablas. Si no queremos agregar una columna adicional para la selección, podemos usar TemplateField para implementar la selección de GridView.
El código ASP.NET es el siguiente:
<asp:BoundField DataField="ObjectID". " Texto de encabezado="ID"/>
<asp:campo de plantilla>
<Plantilla de encabezado>
Nombre
</HeaderTemplate>
<Plantilla de artículo>
<asp:LinkButton id="lbName" runat="Servidor" CommandName="Seleccionar">
<%#Eval("Nombre")%>
</asp:BotónEnlace>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Estado" HeaderText="Estado"/>
Al mismo tiempo, necesitamos agregar dos controladores de eventos a GridView: RowCreated y RowCommand.
//Manejo de eventos RowCreated
void GridView1_RowCreated (remitente del objeto, GridViewRowEventArgs e)
{
si (e.Row.RowType == DataControlRowType.DataRow)
{ ((LinkButton)e.Row.FindControl("lbName")).CommandArgument = e.Row.RowIndex.ToString();
}
}
// Manejo de eventos RowCommand
void GridView1_RowCommand (fuente del objeto, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
GridView1.SelectedIndex = int.Parse(e.CommandArgument.ToString());
}
De esta forma podrás seleccionar al mismo tiempo que haces clic en el nombre, sin tener que utilizar la columna de selección.