GridView CommandArgument para TemplateFields
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.