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 é:
{
GridViewHelper helper = new GridViewHelper(this.GridView1);
helper.RegisterSummary(“ItemTotal”, SummaryOperation.Sum);
}
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