sábado, 8 de setembro de 2007

Formatação em GridView

    Hoje vou falar de um assunto que pode causar muita dor de cabeça para quem está começando a conhecer os controles do ASP.NET.     Vou falar um pouco sobre a formatação de valores em um controle GridView. Nem sempre o dado armazenado no banco representa o que usuários deseja enchergar. Um exemplo disso é o campo de status, onde geralmente é usada uma notação diferente do nome do mesmo, por exemplo, apenas uma letra.     Para iniciar, crie um novo WebSite com o nome de GridFormatado. Arraste um GridView para a tela, crie um banco de dados como mostrado na imagem e faça o vínculo do GridView com o banco através de um controle DataSource.     Execute o projeto e você verá uma tela semelhante a esta ao lado. O GridView mostra os dados da mesma forma em que estão gravadas no banco. Mas não parece muito intuitivo colocar para o usuário final um "A" ou "I" quando o usuário está, respectivamente Ativo ou Inativo.     Da mesma forma que você poderia informar com uma imagem ao invés da letra o sexo do usuário.     Vou ensinar duas formas de fazer isso, uma através de um código inserido diretamente na página .aspx e outro através da chamada de um método na classe derivada da página .aspx.     Acesse a tecla inteligente do GridView, vá até edit columns e clique em Convert this field into a ItemTemplate nos campos Sexo e Status.     Acesse o código do arquivo aspx e encontre o seguinte código dentro sendo atribuído a uma propriedade Text: '<%# Bind("Status") %>'     Neste trecho, pode ver onde o campo Status do Select executado pelo DataSource é preenchido. Esse código retornará apenas um "A" ou "I" conforme nosso banco de dados. Para que neste local aparece um texto mais intuitivo, devemos trocar pelo seguinte código: C# '<%#((string)Eval("Status"))== "A" ? "Ativo" : "Inativo" %>' VB.NET '<%# iif(Eval("Status") = "A" , "Ativo" , "Inativo") %>'     Podemos ver que temos um código simples onde é feito um teste condicional. É uma solução bem simples, nada de fazer novas funções nem nada. Mas nem sempre isso vem de encontro ao que realmente desejamos. Se quiser fazer algo mais complicado, não convém colocar diretamente no código aspx. É nesses casos que usamos as funções no CodeFile.     Acesse o código do arquivo aspx e encontre o seguinte código dentro sendo atribuído a uma propriedade Text: '<%# Bind("Sexo") %>'     Neste trecho, semelhante ao anterior, o campo "Sexo" recebe o seu valor. Esse código retornará apenas um "M" ou "F" conforme nosso banco de dados. Neste caso vamos fazer a troca deste texto via função no CodeFile. Primeiro altere o código no arquivo aspx conforme segue: C# ou VB.NET '<%# FormataSexo(Convert.ToString(Eval("Status"))) %>'     E no CodeFile crie a função com o mesmo nome, lembrando de que como se trata de um acesso a método de fora da classe é necessário declara-lo com modificador de acesso protected. protected string FormataSexo(string sexo)  {   if (sexo =="M")   {    return "Masculino"   }   else   {    return "Feminino"   }  }     As possibilidades vão mais além. Por exemplo, ao invés de ser um texto, uma imagem, então trocando o controle, de um Label para um html img. Isso facilita bastante em casos em que deve-se tratar imagens que não existem, colocando uma default de "imagem não disponível e etc.