O GridView, sem dúvida alguma, representa um grande avanço frente ao DataGrid do ASP.Net 1.1. Porém nossos clientes e usuários sempre necessitam de funcionalidades que vão além das fornecidas nativamente pelo GridView. Um exemplo frequente é a criação de totalizações e agrupamentos. No primeiro caso é relativamente fácil e rápido codificar o evento RowDataBound para obtenção de totais. A criação de grupos no GridView envolve um pouco mais de implementação e depuração. Há dezenas de artigos orientando tais implementações, porém eles induzem os desenvolvedores menos avisados à má prática da recodificação ao invés do reuso.
Mas é apenas quando precisamos combinar os dois recursos, grupos e sumarizações por grupo, que vemos o quanto é fácil se perder em código e depuração, caso não haja uma implementação consistente.
Com o objetivo de simplificar essas tarefas, o colega Agrinei desenvolveu uma biblioteca chamada GridViewHelper, que permite a utilização rápida e confiável de tais recursos.
A biblioteca é bem construída e simples de utilizar. A documentação é de fácil entendimento, mesmo assim, requer um bom conhecimento do controle GridView. Os resultados são bem agradáveis e torna simples algumas tarefas não tão triviais com o controle.
Alguns exemplos abaixo do que é possível obter com a biblioteca sem muito esforço, baseado nos dados do famoso banco de dados Northwind:
Sumarização
ShipRegion |
ShipName |
OrderId |
ProductName |
Quantity |
UnitPrice |
ItemTotal |
RJ |
Hanari Carnes |
10922 |
Alice Mutton |
15 |
R$ 39,00 |
R$ 585,00 |
RJ |
Hanari Carnes |
10922 |
Guaraná Fantástica |
35 |
R$ 4,50 |
R$ 157,50 |
RJ |
Hanari Carnes |
10925 |
Inlagd Sill |
25 |
R$ 19,00 |
R$ 475,00 |
RJ |
Hanari Carnes |
10925 |
Filo Mix |
12 |
R$ 7,00 |
R$ 84,00 |
SP |
Wellington Importadora |
10935 |
Chai |
21 |
R$ 18,00 |
R$ 378,00 |
SP |
Wellington Importadora |
10935 |
Carnarvon Tigers |
4 |
R$ 62,50 |
R$ 250,00 |
SP |
Wellington Importadora |
10935 |
Tunnbröd |
8 |
R$ 9,00 |
R$ 72,00 |
SP |
Gourmet Lanchonetes |
10959 |
Rhönbräu Klosterbier |
20 |
R$ 7,75 |
R$ 155,00 |
SP |
Queen Cozinha |
10961 |
Filo Mix |
6 |
R$ 7,00 |
R$ 42,00 |
SP |
Queen Cozinha |
10961 |
Lakkalikööri |
60 |
R$ 18,00 |
R$ 1.080,00 |
SP |
Comércio Mineiro |
10969 |
Spegesild |
9 |
R$ 12,00 |
R$ 108,00 |
RJ |
Hanari Carnes |
10981 |
Côte de Blaye |
60 |
R$ 263,50 |
R$ 15.810,00 |
RJ |
Que Delícia |
10989 |
Grandma’s Boysenberry Spread |
40 |
R$ 25,00 |
R$ 1.000,00 |
RJ |
Que Delícia |
10989 |
Queso Cabrales |
15 |
R$ 21,00 |
R$ 315,00 |
RJ |
Que Delícia |
10989 |
Jack’s New England Clam Chowder |
4 |
R$ 9,65 |
R$ 38,60 |
|
R$ 20.550,10 |
Agrupamento
ShipName |
OrderId |
ProductName |
Quantity |
UnitPrice |
ItemTotal |
RJ |
Hanari Carnes |
10922 |
Alice Mutton |
15 |
R$ 39,00 |
R$ 585,00 |
Hanari Carnes |
10922 |
Guaraná Fantástica |
35 |
R$ 4,50 |
R$ 157,50 |
Hanari Carnes |
10925 |
Inlagd Sill |
25 |
R$ 19,00 |
R$ 475,00 |
Hanari Carnes |
10925 |
Filo Mix |
12 |
R$ 7,00 |
R$ 84,00 |
Hanari Carnes |
10981 |
Côte de Blaye |
60 |
R$ 263,50 |
R$ 15.810,00 |
Que Delícia |
10989 |
Grandma’s Boysenberry Spread |
40 |
R$ 25,00 |
R$ 1.000,00 |
Que Delícia |
10989 |
Queso Cabrales |
15 |
R$ 21,00 |
R$ 315,00 |
Que Delícia |
10989 |
Jack’s New England Clam Chowder |
4 |
R$ 9,65 |
R$ 38,60 |
SP |
Wellington Importadora |
10935 |
Chai |
21 |
R$ 18,00 |
R$ 378,00 |
Wellington Importadora |
10935 |
Carnarvon Tigers |
4 |
R$ 62,50 |
R$ 250,00 |
Wellington Importadora |
10935 |
Tunnbröd |
8 |
R$ 9,00 |
R$ 72,00 |
Gourmet Lanchonetes |
10959 |
Rhönbräu Klosterbier |
20 |
R$ 7,75 |
R$ 155,00 |
Queen Cozinha |
10961 |
Filo Mix |
6 |
R$ 7,00 |
R$ 42,00 |
Queen Cozinha |
10961 |
Lakkalikööri |
60 |
R$ 18,00 |
R$ 1.080,00 |
Comércio Mineiro |
10969 |
Spegesild |
9 |
R$ 12,00 |
R$ 108,00 |
Agrupamento em 2 níveis
OrderId |
ProductName |
Quantity |
UnitPrice |
ItemTotal |
RJ |
Hanari Carnes |
10922 |
Alice Mutton |
15 |
R$ 39,00 |
R$ 585,00 |
10922 |
Guaraná Fantástica |
35 |
R$ 4,50 |
R$ 157,50 |
10925 |
Inlagd Sill |
25 |
R$ 19,00 |
R$ 475,00 |
10925 |
Filo Mix |
12 |
R$ 7,00 |
R$ 84,00 |
10981 |
Côte de Blaye |
60 |
R$ 263,50 |
R$ 15.810,00 |
Que Delícia |
10989 |
Grandma’s Boysenberry Spread |
40 |
R$ 25,00 |
R$ 1.000,00 |
10989 |
Queso Cabrales |
15 |
R$ 21,00 |
R$ 315,00 |
10989 |
Jack’s New England Clam Chowder |
4 |
R$ 9,65 |
R$ 38,60 |
SP |
Comércio Mineiro |
10969 |
Spegesild |
9 |
R$ 12,00 |
R$ 108,00 |
Gourmet Lanchonetes |
10959 |
Rhönbräu Klosterbier |
20 |
R$ 7,75 |
R$ 155,00 |
Queen Cozinha |
10961 |
Filo Mix |
6 |
R$ 7,00 |
R$ 42,00 |
10961 |
Lakkalikööri |
60 |
R$ 18,00 |
R$ 1.080,00 |
Wellington Importadora |
10935 |
Chai |
21 |
R$ 18,00 |
R$ 378,00 |
10935 |
Carnarvon Tigers |
4 |
R$ 62,50 |
R$ 250,00 |
10935 |
Tunnbröd |
8 |
R$ 9,00 |
R$ 72,00 |
Existem exemplos mais avançados, mas mesmo com tanos recursos, o código para proporcionar a façanha é bem simples, a biblioteca dá conta de aplicar a formatação. Por exemplo, para fazer o agrupamento pela primeira coluna, o código a ser adicionado na sua página é:
protected void Page_Load(object sender, EventArgs e)
{
GridViewHelper helper = new GridViewHelper(this.GridView1);
helper.RegisterSummary(“ItemTotal”, SummaryOperation.Sum);
}
Bem simples e o resultado produzido é muito agradável.
Limitações
Nem tudo é perfeito, mas é preciso avaliar se é este mesmo o propósito. A biblioteca é poderosa, mas só funcionará bem quando o controle GridView trabalhar somente com BoundFields, principalmente na coluna que for agrupada. Ao tentar trabalhar com TemplateField, tive que fazer algumas modificações para que o agrupamento acontecesse. Mesmo assim, caso o controle dentro do TemplateField precisar utilizar propriedades como o CommandArgument, não funcionará pois aparentemente, após a formatação do GridView pela biblioteca, o DataBind é perdido. A razão é que, como linhas novas são adicionadas no GridView, ele se perde pois o RowIndex e outras propriedades tornam-se inválidas.
Valeu uma correção para quem tiver interesse. Afinal, a biblioteca é de código aberto.
Conclusão
Mesmo que o uso destas funcionalidades não seja tão comum, ou melhor, não façam parte das opções no seu cardápio de interfaces pois é complicado promovê-las, esta biblioteca torna-se obrigatória para quem faz uso intenso do controle GridView, principalmente para relatórios.
Site do Autor: http://www.agrinei.com/
Documentação e exemplos: http://www.agrinei.com/gridviewhelper/gridviewhelper_pt.htm
Download do código fonte: http://www.agrinei.com/gridviewhelper/gridviewhelpersample_pt.zip