ASP.NET GridView - Parte 7

watch_later 20 de abr de 2013
Como mesclar células com valores iguais em um GridView

Há uma série de métodos na Internet para resolver o problema de como mesclar linhas  do GridView  se as células vizinhas apresentam valores iguais. Minha abordagem não é a primeira, no entanto, eu acho, é bastante universal e muito simples  menos de 20 linhas de código para fazer oque precisamos.


O algoritmo é simples: para contornar todas as linhas, a partir da segunda, da parte inferior, para o topo. Se um valor de uma célula é o mesmo como um valor da linha anterior (inferior), inserimos um RowSpan e tornamos a célula inferior invisível e se tivermos mais linhas iguais aumentamos o RowSpan, e assim por diante.

O código que mescla as células é muito curto:


public class GridMerges
{
    public static void MergeRows(GridView gridView)
    {
        for (int rowIndex = gridView.Rows.Count - 2; rowIndex >= 0; rowIndex--)
        {
            GridViewRow row = gridView.Rows[rowIndex];
            GridViewRow previousRow = gridView.Rows[rowIndex + 1];

            for (int i = 0; i < row.Cells.Count; i++)
            {
                if (row.Cells[i].Text == previousRow.Cells[i].Text)
                {
                    row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 : 
                                           previousRow.Cells[i].RowSpan + 1;
                    previousRow.Cells[i].Visible = false;
                }
            }
        }
    }
}


A última ação é adicionar um manipulador de eventos OnPreRender para o GridView:


protected void gridView_PreRender(object sender, EventArgs e)
{
    GridMerges.MergeRows(gridView);
}


Outras Postagens do GridView

ASP.NET GridView - Parte 1
ASP.NET GridView - Parte 2
ASP.NET GridView - Parte 3
ASP.NET GridView - Parte 4
ASP.NET GridView - Parte 5
ASP.NET GridView - Parte 6