Busca

segunda-feira, 24 de outubro de 2011

Criando um pager personalizado no GridView ASP.NET

Olá pessoal, hoje vou ensinar como fazer um pager personalizado no GridView do ASP.NET.

Nosso pager será composto de First, Prev, Numeric, Next, Last.

Vamos lá.

Para modificar o Default do pager do Grid sobrecarregue o método RowCreate do GridView e compare se o RowType é igual a "Pager", da seguinte maneira: if (e.Row.RowType == DataControlRowType.Pager)

Após isso vamos ao código, vou colar ele todo aqui pois está comentado.
É bem simples, e o segredo está em realizar um RowCommand para o próprio GridView com o CommandName de Page e o CommandArgument que muda conforme o botão.


if (e.Row.RowType == DataControlRowType.Pager)
{
   //Pega a célula do pager (é uma celula com colspan automatico do tamanho do grid)
   TableCell c = e.Row.Cells[0];
   //Limpa o que tem no Pager
   c.Controls.Clear();
   //Centraliza o Pager novo
   c.Style.Add(HtmlTextWriterStyle.TextAlign, "center");

   //Cria uma tabela para ser o nosso novo pager
   Table tab = new Table();
   //Fix para centralizar a tabela
   tab.Style.Add("margin", "auto");
   //Cria a linha do pager
   TableRow pager = new TableRow();
   //Cria as celulas que vão conter os botões
   TableCell cFirst = new TableCell();
   TableCell cPrev = new TableCell();
   TableCell cNext = new TableCell();
   TableCell cLast = new TableCell();

   //Cria os botões
   ImageButton first = new ImageButton();
   first.ImageUrl = grvDatas.PagerSettings.FirstPageImageUrl;
   first.BorderWidth = 0;
   first.CommandName = "Page";
   first.CommandArgument = "First";

   cFirst.Controls.Add(first);

   ImageButton prev = new ImageButton();
   prev.ImageUrl = grvDatas.PagerSettings.PreviousPageImageUrl;
   prev.BorderWidth = 0;
   prev.CommandName = "Page";
   prev.CommandArgument = "Prev";

   cPrev.Controls.Add(prev);

   pager.Cells.Add(cFirst);
   pager.Cells.Add(cPrev);

   //Variavel de controle da paginação
   //A variavel PageAux, voce deve definir fora do escopo, e setar = 0 no PageLoad dentro de  um if(!IsPostBack)
   int paginacao = grvDatas.PagerSettings.PageButtonCount * PageAux;
   //Variavel da quantidede de paginas que terão no grid
   int qtd_paginas = Convert.ToInt32(decimal.Floor(decimal.Divide(grvDatas.PageCount,  grvDatas.PagerSettings.PageButtonCount)) + 1);

   //Loop para ajustar a página do pager
   for (int k = 0; k < qtd_paginas; k++)
   {
   
    if (paginacao > grvDatas.PageIndex)
   
    {
   
        PageAux = PageAux - 1;
            paginacao = grvDatas.PagerSettings.PageButtonCount * PageAux;
        }
        else if ((paginacao + grvDatas.PagerSettings.PageButtonCount - 1) < grvDatas.PageIndex)
        {
            PageAux = PageAux + 1;
            paginacao = grvDatas.PagerSettings.PageButtonCount * PageAux;
        }
    }

   //Adiciona o ... Antes dos números
   if (paginacao > 0)
   {

        TableCell cNum = new TableCell();
        cNum.Style.Add("border", "solid 1px #000");
        cNum.Style.Add(HtmlTextWriterStyle.VerticalAlign, "middle");
        cNum.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#EEE");
        cNum.Style.Add(HtmlTextWriterStyle.FontSize, "12px");
        cNum.Style.Add(HtmlTextWriterStyle.Width, "25px;");
        cNum.Style.Add(HtmlTextWriterStyle.Height, "25px;");
        cNum.Style.Add(HtmlTextWriterStyle.TextDecoration, "none");
        cNum.Style.Add(HtmlTextWriterStyle.Cursor, "pointer");
        cNum.Attributes.Add("onclick", "javascript:__doPostBack('ctl00$cphConteudo$grvDatas','Page$" + (paginacao).ToString() + "');");

        LinkButton num = new LinkButton();
        num.Style.Add(HtmlTextWriterStyle.TextDecoration, "none");
        num.Text = "...";
        num.CommandName = "Page";
        num.CommandArgument = (paginacao).ToString();

        cNum.Controls.Add(num);
        pager.Cells.Add(cNum);
    }

    //Adiciona os Numeric
    for (int i = paginacao; i < (grvDatas.PagerSettings.PageButtonCount + paginacao); i++)
    {
        if (i < grvDatas.PageCount)
        {
            TableCell cNum = new TableCell();
            cNum.Style.Add("border", "solid 1px #000");
            cNum.Style.Add(HtmlTextWriterStyle.VerticalAlign, "middle");
            cNum.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#EEE");
            cNum.Style.Add(HtmlTextWriterStyle.FontSize, "12px");
            cNum.Style.Add(HtmlTextWriterStyle.Width, "25px;");
            cNum.Style.Add(HtmlTextWriterStyle.Height, "25px;");
            cNum.Style.Add(HtmlTextWriterStyle.TextDecoration, "none");
            cNum.Style.Add(HtmlTextWriterStyle.Cursor, "pointer");
            cNum.Attributes.Add("onclick", "javascript:__doPostBack('ctl00$cphConteudo$grvDatas','Page$" + (i + 1).ToString() + "');");

            LinkButton num = new LinkButton();
            num.Style.Add(HtmlTextWriterStyle.TextDecoration, "none");
            num.Text = (i + 1).ToString();
            num.CommandName = "Page";
            num.CommandArgument = (i + 1).ToString();
            if (i == grvDatas.PageIndex)
            {
                cNum.Style.Add(HtmlTextWriterStyle.FontWeight, "bold");
            }

            cNum.Controls.Add(num);
            pager.Cells.Add(cNum);
        }
    }

    //Adiciona o ... Depois dos numeros
    if ((paginacao + grvDatas.PagerSettings.PageButtonCount) < grvDatas.PageCount)
    {
        TableCell cNum = new TableCell();
        cNum.Style.Add("border", "solid 1px #000");
        cNum.Style.Add(HtmlTextWriterStyle.VerticalAlign, "middle");
        cNum.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#EEE");
        cNum.Style.Add(HtmlTextWriterStyle.FontSize, "12px");
        cNum.Style.Add(HtmlTextWriterStyle.Width, "25px;");
        cNum.Style.Add(HtmlTextWriterStyle.Height, "25px;");
        cNum.Style.Add(HtmlTextWriterStyle.TextDecoration, "none");
        cNum.Style.Add(HtmlTextWriterStyle.Cursor, "pointer");
        cNum.Attributes.Add("onclick", "javascript:__doPostBack('ctl00$cphConteudo$grvDatas','Page$" + ((paginacao + grvDatas.PagerSettings.PageButtonCount) + 1).ToString() + "');");

        LinkButton num = new LinkButton();
        num.Style.Add(HtmlTextWriterStyle.TextDecoration, "none");
        num.Text = "...";
        num.CommandName = "Page";
        num.CommandArgument = ((paginacao + grvDatas.PagerSettings.PageButtonCount) + 1).ToString();

        cNum.Controls.Add(num);
        pager.Cells.Add(cNum);
    }

    ImageButton next = new ImageButton();
    next.ImageUrl = grvDatas.PagerSettings.NextPageImageUrl;
    next.BorderWidth = 0;
    next.CommandName = "Page";
    next.CommandArgument = "Next";

    cNext.Controls.Add(next);

    ImageButton last = new ImageButton();
    last.ImageUrl = grvDatas.PagerSettings.LastPageImageUrl;
    last.BorderWidth = 0;
    last.CommandName = "Page";
    last.CommandArgument = "Last";

    cLast.Controls.Add(last);

    pager.Cells.Add(cNext);
    pager.Cells.Add(cLast);

    tab.Rows.Add(pager);
    //Insere a tabela na celula do pager
    c.Controls.Add(tab);
}

Nenhum comentário:

Postar um comentário