omo implementar a seleção de linha completa no GridView sem o botão de seleçã
Estou implementando um recurso que, quando o usuário pressionar qualquer ponto da linha em um GridView, a linha será selecionada em vez do botão Seleciona
Para implementar isso, estou usando o seguinte código:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Set the hand mouse cursor for the selected row.
e.Row.Attributes.Add("OnMouseOver", "this.style.cursor = 'hand';");
// The seelctButton exists for ensuring the selection functionality
// and bind it with the appropriate event hanlder.
LinkButton selectButton = new LinkButton()
{
CommandName = "Select",
Text = e.Row.Cells[0].Text
};
e.Row.Cells[0].Controls.Add(selectButton);
e.Row.Attributes["OnClick"] =
Page.ClientScript.GetPostBackClientHyperlink(selectButton, "");
}
}
Com o código acima, existem os seguintes problemas:
Isso funciona bem apenas se euEnableEventValidation
para a página está definido comofalse
.OSelectedIndexChanged
é acionado apenas no caso deGrid.DataBind()
é chamado emPage_Load
para a página (em cada postagemEstou fazendo algo errado? Existe uma implementação melhor?
Editar QuandoEnableEventValidation
está configurado paratrue
, o seguinte erro será exibido:
Postback inválido ou argumento de retorno de chamada. A validação de evento é ativada usando-se na configuração ou <% @ Page EnableEventValidation = "true"%> em uma página. Por motivos de segurança, esse recurso verifica se os argumentos para eventos de postagem ou retorno de chamada se originam do controle do servidor que os renderizou originalmente. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postagem ou retorno de chamada para validaçã