Clique aqui para ler todos os artigos desta edição
GridView e DetailsView
Criando campos customizados
Dino Esposito
Este artigo discute |
Este artigo usa as seguintes tecnologias |
· Criação de classes especializadas para representar campos no GridView e DetailsView; · Membros da classe DataControlField; · Criação de um CalendarField e DropDownField; · Usando estilos. |
· ASP.NET 2.0; · Visual Studio 2005; · Criação de componentes e POO. |
Chapéu: ASP.NET |
Download: CuttingEdge0601.exe |
Em ASP.NET 2.0, os controles GridView e DetailsView são projetados para trabalhar em conjunto. Eles não fornecem apenas serviços complementares, mas compartilham também várias classes e componentes. A saída do controle GridView consiste em uma seqüência de linhas, cada uma com um número fixo de colunas. Cada coluna da tabela é mapeada para uma coluna na fonte de dados associada. O controle DetailsView tem um número fixo de linhas (uma para cada coluna na fonte de dados associada) e um número constante de colunas (cabeçalho e valor).
GridView e DetailsView podem ser utilizados em conjunto, para gerar páginas master/detail, como mostrei no artigo da edição passada (“Personalizando os controles DetailsView e FormView”). Ambos representam colunas de dados na fonte de dados associada. Na realidade, a coluna em um GridView e a linha em um DetailsView são do mesmo tipo e são representadas em ASP.NET 2.0 pela mesma classe - DataControlField.
A classe DataControlField é uma classe abstrata e não pode ser utilizada para data binding. Classes descendentes são derivadas para associar dados a controles GridView e DetailsView. No artigo da edição passada, cobrimos alguns desses tipos de campo. Em particular, mostramos como utilizar a classe TemplateField para adicionar validação e características especiais de interface de usuário para edição de campos de dados. A classe TemplateField funciona como um container para código markup. É ideal para construir tipos personalizados de dados e qualquer combinação de campos existentes que poderíamos necessitar. O tipo TemplateField também pode ser utilizado para apresentação de colunas de chave-estrangeira via listas dropdown ou de datas via calendários.
E se quiséssemos uma classe especializada e mais compacta para representar campos através de calendários, por exemplo um tipo CalendarField que apresentasse campos date como uma string quando em modo de visualização e utilizasse um controle Calendar quando em modo de edição e inserção? Como mencionamos, podemos alcançar o mesmo resultado utilizando um TemplateField, mas isso seria como utilizar objetos late-bound versus objetos early-bound. Uma página que utilize um CalendarField será mais fácil de ler e até um pouco mais rápida de ser processada em tempo de execução.
Abordaremos o projeto e implementação de custom data fields (que chamaremos a partir de agora de simplesmente “campos personalizados”), e mostraremos como codificá-los através de alguns exemplos: CalendarField para apresentar valores date e DropDownField para apresentar valores de chave-estrangeira definidos em uma fonte de dados externa.
A classe DataControlField
A classe DataControlField em ASP.NET 2.0 é análoga à classe DataGridColumn utilizada extensivamente com controles DataGrid em ASP.NET 1.x, e só é utilizada pelos controles GridView e DetailsView. Porém, se formos escrever um controle data-bound personalizado, que requer ligação à colunas de dados, podemos utilizar o tipo DataControlField para associar colunas de dados ao controle de interface de usuário.
Como vimos, a DataControlField é uma classe abstrata que herda diretamente de System.Object e implementa a interface IStateManager. A Tabela 1 relaciona os métodos e propriedades da classe. Como podemos ver, a classe oferece algumas propriedades para suporte a estilos: ItemStyle, HeaderStyle, FooterStyle e ControlStyle. Em ASP.NET, propriedades de estilo não são persistidas no ViewState. A classe Style, da qual todas as propriedades de estilo derivam, implementa IStateManager para processar a persistência no ViewState. Para utilizar essa característica específica, classes que expõem propriedades de estilo, tipicamente implementam por si próprias a interface IStateManager, para delegar a persistência com ViewState. Posteriormente retornaremos a esse assunto.
Propriedade |
Descrição |
AccessibleHeaderText |
Obtém ou determina o texto que será apresentado como o valor da propriedade AbbreviatedText em alguns controles, por razões de acessibilidade |
ControlStyle |
Obtém as propriedades de estilo para qualquer controle de entrada usado nos modos de edição ou inserção |
FooterStyle |
Obtém as propriedades de estilo para o rodapé (footer) do campo. Aplicável somente ao controle GridView |
FooterText |
Determina o texto a ser exibido no rodapé do campo. Aplicável somente ao controle GridView |
HeaderImageUrl |
Obtém ou fixa a referência de URL para exibir uma imagem em vez de texto no cabeçalho deste campo |
HeaderStyle |
Obtém as propriedades de estilo para o cabeçalho deste campo |
InsertVisible |
Indica se o campo será exibido quando o controle associado estiver em modo de inserção. Aplicável somente ao controle DetailsView |
ItemStyle |
Obtém as propriedades de estilo para um item deste campo |
ShowHeader |
Determina se o cabeçalho do campo é visível. Isso só é respeitado pelo controle DetailsView |
... |