Utilizando o Visual Studio 2008, percebe-se que, os controles GridView, FormView e DetailsView já possuem o recurso de paginação integrado, porém, o Datalist não fornece wizards para paginação, sendo assim, a mesma deve ser criada de forma customizada utilizando o objeto PagedDataSource.
Perceba que, o exemplo que será mostrado neste artigo, permitirá uma paginação onde possui os botões “next” e “preview”, bem como os links para cada pagina criada e uma legenda informativa dizendo qual página está selecionada, veja na Figura 1 abaixo:
Figura 1 – Paginação Datalist
Confira as propriedades do PagedDataSource, perceba que existem outras propriedades como isFirstPage (ir para primeira página) e isLastPage (ir para última página).
Com o PagedDataSource, será permitido utilizá-lo em conjunto ao Datalist, Repeater, Dropdownlist, dentre outros, basta associar a ele uma fonte de dados e quantas informações por página este irá exibir, perceba pelo exemplo abaixo, utilizando um sqlDataSource:
Aspx:
<div style="float: left">
<asp:Label ID="lblPaginasTopo" runat="server" Text="" ForeColor="Black" Font-Size="14px">
</asp:Label>
</div>
<div style="float: left; padding-left: 20px;">
<asp:ImageButton ID="btnPrevTopo" runat="server" AlternateText="Voltar" OnClick="btnPrev_Click"
ImageUrl="~/design/bgBack.gif" Width="19px" Height="19px" />
<asp:LinkButton ID="divLinks" runat="server" OnClick="link_Click"></asp:LinkButton>
<asp:ImageButton ID="btnNextTopo" runat="server" AlternateText="Próximo" OnClick="btnNext_Click"
ImageUrl="~/design/bgNext.gif" Width="19px" Height="19px" />
</div>
C#:
protected void Page_Load(object sender, EventArgs e){GetData();if (!Page.IsPostBack){GetData();if (ViewState["PagedDataSource"] != null){createPaging((int)ViewState["PagedDataSource"]);}}else{if (ViewState["PagedDataSource"] != null){createPaging((int)ViewState["PagedDataSource"]);}}}private void GetData(){PagedDataSource pgds = new PagedDataSource();pgds.AllowPaging = true;pgds.DataSource = sdsResultado.Select(DataSourceSelectArguments.Empty);pgds.PageSize = 10;pgds.AllowPaging = true;pgds.CurrentPageIndex = PaginaAtual;btnNextTopo.Enabled = !pgds.IsLastPage;btnPrevTopo.Enabled = !pgds.IsFirstPage;lblPaginasTopo.Text = string.Concat("Página ", (PaginaAtual + 1).ToString(), " de ", pgds.PageCount.ToString());ViewState["PagedDataSource"] = pgds.PageCount;dlResultado.DataSource = pgds;dlResultado.DataBind();}public int PaginaAtual{get{object o = this.ViewState["PaginaAtual"];if (o == null || (int)o < 0)return 0;elsereturn (int)o;}set{this.ViewState["PaginaAtual"] = value;}}protected void createPaging(int pgds){for (int i = 0; i < pgds; i++){LinkButton link = new LinkButton();link.Text = (i + 1).ToString();link.ID = string.Concat("txt_", i.ToString());link.Click += new EventHandler(link_Click);divLinks.Controls.Add(link);LiteralControl space = new LiteralControl(" ");divLinks.Controls.Add(space);}}protected void link_Click(object sender, EventArgs e){LinkButton link = (LinkButton)sender;PaginaAtual = Convert.ToInt32(link.Text) - 1;GetData();}protected void btnPrev_Click(object sender, ImageClickEventArgs e){PaginaAtual--;GetData();}protected void btnNext_Click(object sender, ImageClickEventArgs e){PaginaAtual++;GetData();}
Perceba que, na criação da página aspx, foram adicionados os seguintes componentes:
em qual página está o resultado da consulta;
e “next”, que através de seus metodos de OnClick irão “navegar” pelo resultado;
para cada página que foi encontrada de paginação.
Observando o método GetData(), perceba que “sdsResultado” é um sqlDataSource que contém o resultado de uma determinada consulta, e que “pgds.PageSize” irá informar quantos resultados por página serão exibidos.
Com o texto acima, pode-se realizar uma simples, rápida e eficiente paginação de dados utilizando sqlDatasource em conjunto com Datalist.
Por favor,
Vocês poderiam postar o mesmo método de paginação mas utilizando banco de dados?
Valeu !!
Cara... vc me ajudou muito, estou iniciando em programação e tava ficando maluco, pois tenho que apresentar um trabalho asp.net, um site de e-commerce e precisava usar paginação no datalist para não mostrar aquela enorme quantidade de produto, poxa, me ajudou muito vlw... parabéns pelo trabalho.
att Lucas Bispo
Parabéns pelo artigo.
Ajudou muito!!!