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