msdn14_capa.gif

Clique aqui para ler todos os artigos desta edição

Criando colunas dinamicamente no ASP.NET DataGrid
por Marcos Santos e Alexandre Santos

Este artigo discute

Este artigo usa as seguintes tecnologias:

·          Controle ASP.NET DataGrid

·          Acesso a banco de dados

C#, SQL

 

Download:

fontesDataGridDinamico.zip (24KB)

Chapéu

DataGrid

 

 

Desde o lançamento do ASP.NET o DataGrid é um dos controles mais empregados, principalmente pela sua fácil utilização e quantidade de recursos que auxiliam o desenvolvedor a criar páginas robustas e atrativas. Através do Visual Studio .NET fica ainda mais inspirador o uso de DataGrid, dada à velocidade de desenvolvimento, já que em poucos cliques, têm-se acesso aos Wizards que configuram as colunas (Property Builder) e o formato visual (Auto Format), restando apenas atribuir o seu DataSource, podendo ser um DataTable, Coleções entre outros.

O objetivo deste artigo é mostrar a 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 no banco de dados Northwind do SQL Server. É apresentado ao usuário todos os Produtos agrupados por Categorias, com subtotais. Para isto, é utilizado como DataSource um novo DataTable criado a partir dos dados retornados na 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 utilizando o VS.NET?”. Certo? A resposta para tal pergunta pode ser melhor analisada através do seguinte questionamento: “Como fazer para que um mesmo DataGrid seja parametrizado de forma tal, 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 (OO) – 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 consulta SQL diferente um do outro. 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 estes métodos. Desta 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).

 

Projeto

Crie um projeto ASP.NET Web Application chamado DataGridAgrupadoColunas usando como linguagem o Visual C#, contendo um formulário chamado GridAgrupadoColunas.aspx. Insira 3 controles, 1 DataGrid (id = gridProdutoCategorias), 1 Button (id = btnSelecionados ) e 1 ListBox (id = lstSelecionados) - veja a Figura 1. Apenas observe que são utilizadas tabelas HTML para possibilitar uma melhor organização visual.

 

image001.gif
Figura 1 –
Layout de Interface sugerido.

Para agilizar o tempo de desenvolvimento, selecione o DataGrid e formate a cor e fonte do cabeçalho, através de suas propriedades HeaderStyle. Em tempo de design não é necessário fazer mais nada.

No projeto sugerido é realizada uma consulta ao Banco de Dados Northwind do SQL Server, retornando a tabela Products com sua respectiva Categories, como na Figura 2. Porém, os produtos serão visualizados agrupados por Categorias no DataGrid, incluindo subtotais e, no final, um Total Geral. Para isto, via programação, a partir da consulta original é criado um novo DataTable no modelo final.

 

image003.jpg
Figura 2 –
Query realizada no Northwind

 

No DataGrid são criadas 5 colunas dinamicamente:

 

Nome

Tipo

Obs.

Selecionar

TemplateColumn

TemplateColumnCheckBox

Descrição

BoundColumn

 

...
Quer ler esse conteúdo completo? Tenha acesso completo