No ensaio de estudo anterior, podemos usar DataKeyNames e DataKeys para realizar acesso a dados na coluna de chave primária do GridView. Em experimentos subsequentes, descobri que podemos usar TemplateField para obter outros acessos a dados
.
<ItemTemplate>
<asp:Literal id="litUserName" runat="Servidor" Text='<%#Eval("NomeUsuário")%>'/>
</ItemTemplate>
</asp:TemplateField>
//Implementação de back-end
String userName = ((Literal)GridView1.SelectedRow.FindControl("litUserName")).Text;
A propriedade AutoGenerateSelectButton do GridView pode ativar diretamente a seleção da tabela. Se não quisermos adicionar uma coluna extra para seleção, podemos usar TemplateField para implementar a seleção do GridView.
O código ASP.NET é o seguinte:
<asp:BoundField DataField="ObjectID. " HeaderText="ID"/>
<asp:TemplateField>
<HeaderTemplate>
Nome
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton id="lbName" runat="Servidor" CommandName="Selecionar">
<%#Eval("Nome")%>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Status" HeaderText="Status"/>
Ao mesmo tempo, precisamos adicionar dois manipuladores de eventos ao GridView: RowCreated e RowCommand.
// Manipulação de eventos RowCreated
void GridView1_RowCreated(objeto remetente, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{ ((LinkButton)e.Row.FindControl("lbName")).CommandArgument = e.Row.RowIndex.ToString();
}
}
// Manipulação de eventos RowCommand
void GridView1_RowCommand (fonte do objeto, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
GridView1.SelectedIndex = int.Parse(e.CommandArgument.ToString());
}
Desta forma, você pode selecionar ao mesmo tempo que clica no nome, sem precisar utilizar a coluna de seleção.