DataGrid - Criando colunas dinamicamente

O objetivo deste artigo é mostrar a possibilidade de formatação e criação de colunas no DataGrid de forma dinâmica.

Esse artigo faz parte da revista Clube Delphi Edição 84. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler esse artigo em PDF.

ASP.NET

DataGrid - Criando colunas dinamicamente

 

Desde o lançamento do ASP.NET, o DataGrid é um dos controles mais empregados, principalmente pela sua fácil utilização e pela quantidade de recursos que auxiliam o desenvolvedor a criar páginas robustas e atrativas.

Com poucos cliques, tem-se acesso aos wizards que configuram as colunas (Property Builder) e o formato visual (Auto Format), restando apenas atribuir o DataSource, podendo ser um DataSet, DataTable, coleções, entre outros.

O objetivo deste artigo é mostrar a possibilidade de formatação e criação de colunas no DataGrid de forma dinâmica. É criado um projeto ASP.NET que efetua uma consulta de Produtos com suas respectivas Categorias, em um banco de dados do Firebird.

 

Nota: O banco de dados que acompanha o Firebird (Employee) não possui essas tabelas, então foi disponibilizado para download um banco com as respectivas tabelas.

 

Deseja-se apresentar ao usuário todos os Produtos agrupados por Categorias, com subtotais. Para isso, é utilizado como DataSource um DataTable criado a partir do retorno da consulta. Talvez você esteja se perguntando: “Por que criar colunas dinamicamente, se é possível criá-las sem uma linha de código e de forma quase que instantânea?”. Certo?

A resposta para essa pergunta pode ser melhor analisada através do seguinte questionamento: “Como fazer para que um mesmo DataGrid seja parametrizado de forma que em certas situações apresente X colunas e em outras situações apresente Y colunas?”. Resposta: Criar as colunas dinamicamente, podendo também utilizar artifícios de Orientação a Objetos como Herança e Polimorfismo.

Para aumentar a compreensão da resposta apresentada, imagine que você queira centralizar seus relatórios em apenas uma página ASPX com apenas um DataGrid e que cada relatório tenha uma consulta SQL diferente. Uma forma viável, através de OO, é criar uma classe pai RelatorioPadrao com dois métodos: retornaColunas e retornaDados e para cada relatório a ser gerado, criar classes filhas (exemplo RelatorioProduto) que irão sobrescrever esses métodos.

 Dessa forma, na página ASPX será instanciada a classe desejada e invocados os métodos que retornam as colunas do DataGrid e seu DataSource. Neste artigo, para simplificar, não será modelado através de classes e subclasses.

A criação das colunas, formatação do DataGrid e agrupamento com subtotais serão feitos diretamente na classe da interface (ASPX).

 

Dica: Para uma introdução ao uso do DataGrid no Delphi, veja o artigo de Rodrigo Sendin na edição 73.

 

Projeto

No Delphi 8, 2005 ou 2006 crie um projeto ASP.NET chamado “DataGridAgrupadoColunas” contendo um formulário chamado “GridAgrupadoColunas.aspx”. Adicione um DataGrid (“gridProdutoCategorias”), um Button (“btnSelecionados”) e um ListBox (“lstSelecionados”).

Como sugestão de layout, veja a Figura 1. Apenas observe que são utilizadas tabelas HTML para possibilitar uma melhor organização visual.

 

Figura 1. Layout de interface sugerido

 

Para agilizar o tempo de desenvolvimento, selecione o DataGrid e formate a cor e fonte do cabeçalho. Em tempo de design não é necessário fazer mais nada. No projeto sugerido, é realizada uma consulta ao banco de dados Employee do Firebird, retornando a tabela Produtos com sua respectiva Categorias, como na Figura 2.

 

Figura 2. Consulta realizada nos Produtos e Categorias

 

Porém, o desejado é que os produtos sejam visualizados agrupados por categorias no DataGrid, incluindo subtotais e no final um Total Geral. Para isso, via programação, a partir da consulta original, é criado um novo " [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados