Fala Galera, uma coisa que sempre vejo muito em foruns e até mesmo em Blogs é o pessoal falando da necessidade de Paginar Datalist´s e Repeater´s.

Bom Dando uma Pesquisada na Documentação do Framework 2.0 achei uma Classe que faz isso muito Facilmente, e ela de chama.... Tcham tcham tchammmmm.... rsrsrrs


"PagedDataSource"

Ela faz a Paginação automatica do um ObjectDataSource, SQLDataSource e etc...

Então vamos a um Exemplo né Paulo.

Imagine que voce Criou uma Classe utilizando DataReader para fazer a Leitura dos Dados de Uma tabela no Banco Mais ou Menos Assim.

CODE
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;

namespace ClassVitSaude
{
    [System.ComponentModel.DataObject]
    public class produtos
    {
        private int _idproduto;
        public int Idproduto
        {
            get { return _idproduto; }
            set { _idproduto = value; }
        }
        private int _idfornecedor;
        public int Idfornecedor
        {
            get { return _idfornecedor; }
            set { _idfornecedor = value; }
        }
        private int _idcategoria;
        public int Idcategoria
        {
            get { return _idcategoria; }
            set { _idcategoria = value; }
        }
        private string _nome;
        public string Nome
        {
            get { return _nome; }
            set { _nome = value; }
        }
        private string _resumo;
        public string Resumo
        {
            get { return _resumo; }
            set { _resumo = value; }
        }
        private string _descricao;
        public string Descricao
        {
            get { return _descricao; }
            set { _descricao = value; }
        }
        private decimal _preco;
        public decimal Preco
        {
            get { return _preco; }
            set { _preco = value; }
        }
        private string _foto;
        public string Foto
        {
            get { return _foto; }
            set { _foto = value; }
        }
        private bool _autorizado;
        public bool Autorizado
        {
            get { return _autorizado; }
            set { _autorizado = value; }
        }
        private string _fornecedor;
        public string Fornecedor
        {
            get { return _fornecedor; }
            set { _fornecedor = value; }
        }
        private string _categoria;
        public string Categoria
        {
            get { return _categoria; }
            set { _categoria = value; }
        }


        public produtos()
        {
        }


        public produtos(int idproduto, int idfornecedor, int idcategoria, string nome, string resumo, string descricao,
            decimal preco, string foto, bool autorizado, string fornecedor, string categoria)
        {
            _idproduto = idproduto;
            _idfornecedor = idfornecedor;
            _idcategoria = idcategoria;
            _nome = nome;
            _resumo = resumo;
            _descricao = descricao;
            _preco = preco;
            _foto = foto;
            _autorizado = autorizado;
            _fornecedor = fornecedor;
            _categoria = categoria;

        }



[DataObjectMethod(DataObjectMethodType.Select, true)]
        public List<produtos> Allprodutos()
        {
            Database db = DatabaseFactory.CreateDatabase("VitSaudeCS");
            DbCommand comand = db.GetStoredProcCommand("AllProdutos");
            List<produtos> collection = new List<produtos>();
            if (comand != null)
            {
                using (IDataReader reader = db.ExecuteReader(comand))
                {
                    while (reader.Read())
                    {
                        produtos txt = new produtos(
                            (int)reader["idproduto"],
                            (int)reader["idfornecedor"],
                            (int)reader["idcategoria"],
                            (string)reader["nome"],
                            (string)reader["resumo"],
                            (string)reader["descricao"],
                            (decimal)reader["preco"],
                            (string)reader["foto"],
                            (bool)reader["autorizado"],
                            (string)reader["fornecedor"],
                            (string)reader["categoria"]);
                        collection.Add(txt);
                    }
                }
            }
            return collection;
        }
   }
}



Certo ? isso tras os Dados da Tabela Produtos para serem exibidos em qualquer componente mas a paginação automatica só seria possivel no GridView Correto ? ERRADO....

Imagine de Novo que voce tem um DataList na Pagina de Produtos.aspx


CODE
<asp:DataList ID="DTLRandProds" runat="server" RepeatColumns="4" RepeatDirection="Horizontal"
                        Style="margin-top: 10px; margin-bottom: 10px">
                        <ItemTemplate>
                            <div id="prods" style="width: 100%; height: 100%; text-align: center">
                                <asp:ImageButton ID="ImageButton2" runat="server" AlternateText='<%# Eval("Nome") %>'
                                    ImageUrl='<%# Eval("Foto","thumbnails.aspx?img=~/imgProdutos/{0}&maxW=80&maxH=60") %>'
                                    PostBackUrl='<%# "~/detProdutos.aspx?idproduto="+Eval("Idproduto") %>' Style="margin: 5px" /><br />
                                <asp:Label ID="lblnomeProd" runat="server" CssClass="lblnomeprods" Text='<%# Eval("Nome") %>'
                                    Width="130px"></asp:Label><br />
                                <asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="~/App_Themes/themecliente/Imagens/btn_vejaMais.jpg"
                                    PostBackUrl='<%# Eval("Idproduto", "~/detProdutos.aspx?idproduto={0}") %>' Style="margin-top: 3px" /></div>
                        </ItemTemplate>
                        <AlternatingItemStyle BackColor="#f8f8ff" />
                        <ItemStyle Width="160px" />
                    </asp:DataList>


A Direferença Agora é que ao Invés de criarmos um ObjectDataSource direto na Pagina, vamos Codificar um pouco né.

na Pagina Produtos.aspx.cs vamos colocar o Seguinte Codigo:


CODE
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using ClassVitSaude;

public partial class Produtos : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ItemsGet();
    }
private void ItemsGet()
    {
        //Instanciamos a classe que recupera os Produtos
        ClassVitSaude.produtos prods = new produtos();
  
        //Instaciamos a Classe PagedDataSource que é a responsavel pela Paginação
        PagedDataSource pgds = new PagedDataSource();

        //Dizemos que ela esta habilitada para ser paginada
        pgds.AllowPaging = true;
        
        //E Informamos que o DataSource do Objeto é a Classe que Criamos.
        pgds.DataSource = prods.Allprodutos();
        
        //Dizemos que o Limite de produtos apresentados vai ser de 20 por pagina
        pgds.PageSize = 20;

        //e o Resto são Informaçãoes de Paginação comun como podem ver abaixo
        pgds.CurrentPageIndex = CurrentPage;

        lblCurrentPage.Text = "Pagina: " + (CurrentPage + 1).ToString() + " de <b>"
            + pgds.PageCount.ToString() + "</b>";

        if (pgds.PageCount == 1 && CurrentPage+1 == 1)
        {
            lblCurrentPage.Visible = false;
        }
        else
        {
            lblCurrentPage.Visible = true;
        }

        cmdPrev.Visible = !pgds.IsFirstPage;
        cmdNext.Visible = !pgds.IsLastPage;

        DTLRandProds.DataSource = pgds;
        DTLRandProds.DataBind();

    }


    public void cmdPrev_Click(object sender, EventArgs e)
    {
        CurrentPage--;

        ItemsGet();
    }

    public void cmdNext_Click(object sender, EventArgs e)
    {

        CurrentPage++;

        ItemsGet();
    }
  

   public int CurrentPage
    {
        get
        {
            object o = this.ViewState["_CurrentPageProdutos"];
            if (o == null || (int)o < 0)
                return 0;
            else
                return (int)o;
        }

        set
        {
            this.ViewState["_CurrentPageProdutos"] = value;
        }
    }
}


e de novo na Pagina Produtos.aspx logo abaixo do Datalist acrescente o seguinte:

CODE
<div id="paging" style="text-align: right; margin-bottom: 15px; clear: both;">
                        
<asp:Label ID="lblCurrentPage" runat="server" Font-Names="Verdana" Font-Size="8pt" ForeColor="#A9A9A9"></asp:Label>
                           
<asp:ImageButton ID="cmdPrev" runat="server" AlternateText="Pagina Anterior" ImageUrl="~/App_Themes/themecliente/Imagens/butback.gif" OnClick="cmdPrev_Click" />
                          
<asp:ImageButton ID="cmdNext" runat="server" AlternateText="Próxima Pagina" ImageUrl="~/App_Themes/themecliente/Imagens/butnext.gif" OnClick="cmdNext_Click" />
                           
</div>



Bom pessoal acho que é isso, não sou muito bom de explcar as coisas mas acho que da pra ajudar um pouco o pessoal que saca um poquinho de asp.net.

Dúvidas ?? é só Postar uma Mensagem que agente ajuda.

Abraços a Todos

Você gostou? Comente no fórum!

Comentários:

sdouglas disse:

Muito bom.

Quando ia começar a começar a codificar achei este artigo e não tive que perder tempo criando o que já existia (não conhecia o PageDataSource).

Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).

Mais recentes em .Net

Usando fckeditor
Por Ivan - Bom galera vai aqui mais um tutorial que será bem últil:...
Lendo arquivos texto
Por quintelab - Este artigo traz um assunto simples mas que quase todos...
Formatando colunas da gridview em tempo de execução
Por quintelab - Este artigo mostra como formatar uma coluna da gridview...
Carregar página de pesquisa com pop up
Por quintelab - O artigo mostra como chamar uma página de pesquisa...
Exibindo mapa usando a api do google.
Por Ivan - Usando subgurim.net...

Ver mais Artigos de .Net.

Ver e retirar outras dúvidas no fórum Webly.

Alguns Direitos Reservados | RSS | O Fórum

Webly Portal e Fóruns - Internet + Humana | Design by ArthurHenrique.com