msdn26_capa.jpg

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

...

Quer ler esse conteúdo completo? Tenha acesso completo