GridView CommandArgument para TemplateFields

2008-08-05

Um problema que gera alguma confusão no uso de GridViews é quando é necessário utilizar controlos do tipo Button ou ImageButton dentro de um TemplateField. O problema principal é que, enquanto no postback a informação do CommandName passa correctamente, o do CommandArgument não passa correctamente – é necessário fazer o Bind explicitamente.

Um exemplo: Tenho um GridView com botões no fim (não são do tipo edit, delete…) de cada linha. Cada linha apresenta dados de um registo e cada um dos botões atribui um valor distinto a um campo desse registo (botão 1 coloca “A” no campo, o botão 2 coloca “B” no campo, etc…).

Enquanto que, com CommandFields, podemos obter o número do registo pelo número de linha/índice (passo no GridViewCommandEventArgs), com o uso do TemplateField, o CommandArgument não passa. É necessário atribuí-lo explicitamente, adicionando o valor directamente:

Ou associando o numero do índice da GridView através de

Assim, no postback, teremos disponível um valor (um valor do registo, explicito, ou o índice da linha do GridView) para usar.