Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Domingos Carreira De Paola

[Resolvido] Paginando um repeater

Recommended Posts

Muitas vezes em nas nossas aplicações necessitamos exibir listagens cada vez mais customizadas de acordo com o gosto dos clientes, para isso muitas vezes temos que utilizar o Repeater, que diferentemente do Gridview não possui suporte a uma paginação pronta.

Nesse artigo demonstro como é facil paginarmos um repeater utilizando a classe PagedDataSource do Asp.net

É importante esclarecer que o PagedDataSource não aceita fontes de dados complexas como o DataSet, por tanto a solução é criar uma lista de tipos da sua tabela e preenche-la com as colunas do seu DataSet ou DataReader.

Segue o código :

 

Primeiramente vamos criar a função getDados, reponsável por popular o repeater já paginado :

 

private void getDados() 
		{
			DataSet ds = new DataSet();
			// ds = metodo que retorna o dataset da sua consulta.
			paginaAtual = Convert.ToInt32(ViewState["pagina"]);
			// Trocando dados pelo nome da sua classe tipada de acordo com a sua tabela.
			List<Dados> lst = new List<Dados>();
			for (int i = 0; i < ds.Tables[0].Rows.Count;i++ )
			{
				//Instancia um novo objeto do tipo da sua tabela.
				Dados dados= new Dados();
				dadosDescricao = ds.Tables[0].Rows[i]["descricao"].ToString();
				lst.Add(dados);
			}
			PagedDataSource pgds = new PagedDataSource();
			
			//Setamos a fonte de dados do pgds como nossa lista de tipos da nossa tabela
			pgds.DataSource = lst;
			pgds.CurrentPageIndex = paginaAtual;
			pgds.AllowPaging = true;

			//Seta o numero de registros por página
			pgds.PageSize = 5;

			//Caso seja a primeira pagina, não mostra o botão anterior.
			btnAnt.Visible = pgds.IsFirstPage? false : true;

			//Outra forma de obter o mesmo efeito com o botão proximo.
		   btnProx.Visible = !pgds.IsLastPage;

		   //Setamos a fonte do repeater como sendo nosso pgds que já está devidamente paginado.
		   rpt1.DataSource = pgds;
		   rpt1.DataBind();
		}
   
//No Page_Int da página nós setamos o viewstate que armazena a pagina atual como 0 para começar da primeira página e chamamos a função :

 protected void Page_Init(object sender, EventArgs e)
		{
			ViewState["pagina"] = 0;
			getDados();
		}

//Acrecentamos agora a chamada dos nossos eventos de proximo e anterior :

 protected void Proximo(object sender, EventArgs e)
		{
			paginaAtual = Convert.ToInt32(ViewState["pagina"]);
			paginaAtual++;
			ViewState["pagina"] = paginaAtual;
			getDados();
		}
		protected void Anterior(object sender, EventArgs e) 
		{
			paginaAtual = Convert.ToInt32(ViewState["pagina"]);
			paginaAtual--;
			ViewState["pagina"] = paginaAtual;
			getDados();
		}

Na nossa página aspx eu teria básicamente um repeater e dois linkButons (ou image buttons ou Buttons) :

 

<asp:Repeater runat="server" ID="rpt1">
           <ItemTemplate >
              <div> <%#Eval("descricao") %> </div>
           </ItemTemplate>
       </asp:Repeater>
      <asp:LinkButton runat="server" style="padding-right:9px" OnClick="Anterior" Text="<< Ant" ID="btnAnt" /><asp:LinkButton runat="server" Text="Prox >>" OnClick="Proximo" ID="btnProx" />

 

 

Bom é isso espero que tenham gostado, nesse artigo ensinei basicamente a utilizar o objeto PagedDataSource do Asp.net

 

Keep Coding

 

Domingos Carreira De Paola

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.