ASP.NET - Paginação com DataGrid via código


Em meu artigo ASP.NET - Paginando dados em um DataGrid  mostrei como você pode efetuar a navegação em um datagrid via paginação usando os recursos que o DataGrid oferece.

Apenas para lembrar reproduzo abaixo como podemos fazer isto usando estes recursos do DataGrid:

Para implementar a paginação dos dados no componente DataGrid basta definir as seguintes propriedades :

 

1- ) AllowPaging="True" - ativa a paginação no componente DataGrid
2- ) PageSize="15" -
define o número de registros a ser exibido em cada página
3- ) OnPageIndexChanged="dgProdutos_Paged" - Define o evento que será usado para ativar a paginação.

 

Para customizar a página usamos a tag PagerStyle que permite a navegação pelas páginas de dados. Nesta tag definimos :

 

1- A propriedade Mode pode receber dois valores que definem como serão os links de navegação :

  • NumericPages  - valores numéricos indicam as páginas

  • NextPrev   -  definem links para a página anterior e a próxima página

Você pode obter o mesmo efeito via código vb.net.  Neste artigo eu vou usar o Web Matrix como editor de código e o seu servidor para testar a página paginacaoSimples.aspx.

Abra no Web Matrix e crie uma nova página Asp.net com o nome de paginacaoSimples.aspx.

Na guia Design inclua um componente DataGrid usando a formatação de sua escolha e um componente Label conforme indicado na figura abaixo:

Agora vamos ao código que deverá ser impostado na guia Code do Web Matrix:

No evento Load da página temos o código: O código define o número da página atual e chama as rotinas para gerar o dataset e efetuar a paginação.

Sub Page_Load(Source as Object, E as EventArgs)
dim paginaAtual as integer

if request.querystring("pagina") = "" then
    paginaAtual = 1
else
    paginaAtual = request.querystring("pagina")
end if
pegaResultset(paginaAtual)
efetuaPaginacao(paginaAtual)

end sub

A rotina pegaResultset tem a seguinte funcionalidade : Nela usamos um DataSet preenchido com os dados da tabela Products do banco de dados Northwind.mdb e exibe o resultado no datagrid.

Note que estamos usando uma das assinaturas do método Fill.

O VB.NET, como toda boa linguagem orientada a objetos que se preze, permite que tenhamos múltiplos métodos com o mesmo nome mas com uma lista de argumentos diferentes. A isto chamamos : Sobrecarga ou Overloading.

Para indicar isto no VB.NET incluímos a palavra-chave Overloads na primeira parte da assinatura do método. (A assinatura é o nome do método).

Nota: O uso da palavra-chave Overloads é opcional e você pode ter métodos com o mesmo nome sem usar Overloads. Veja abaixo um exemplo de sobrecarga.

Overloads Public Function Fill(DataSet, Integer, Integer, String) As Integer

public sub pegaResultset(pagina as integer)

dim numreoPagina as integer
dim sql as string

numreoPagina = 10 * (pagina - 1)

Dim ds as DataSet=New DataSet()
sql = "select * from Products"

Dim cmd As OleDbDataAdapter = New OleDbDataAdapter(sql, objCon)
cmd.Fill(ds, numreoPagina , 10, "resultado")

tabela_resultset.DataSource = ds.Tables("resultado").DefaultView
tabela_resultset.databind()

end sub

A rotina que efetua a paginação é a seguinte :No código usamos o objeto Command para executar um comando SQL usando ExecuteScalar. Este comando irá retornar a quantidade total  de registros na tabela Produtcts e irá armazenar o resultado na variável totalRegistros. O total de páginas será obtido pela operação : int(totalRegistros / 10) . Se o resto da divisão por 10 for diferente a zero acrescentamos um ao resultado. Em seguida montamos o texto em pageTexto.

O objeto Command fornece o método ExecuteScalar que permite retornar um valor único de uma fonte de dados. Este método executa uma consulta e retorna a primeira coluna da primeira linha do conjunto de registros retornado

O método ExecuteScalar é o meio mais rápido de se acessar e retornar dados em um base de dados.

Sub efetuaPaginacao(cPagina as integer)

Dim cmd As OleDbCommand = New OleDbCommand("Select count(*) from Products", objCon)
objCon.Open()

Dim totalRegistros as integer = cmd.ExecuteScalar().toString
Dim totalPaginas As integer

if totalRegistros MOD 10 = 0 then
   totalPaginas = int(totalRegistros / 10)
else
   totalPaginas = int(totalRegistros / 10) + 1
end if

Dim i as integer
Dim pageTexto As String = "Navegação :    "

if cPagina > 1 then
  pageTexto += "<a href=paginacaoSimples.aspx?pagina=" & cPagina - 1 & ">Anterior</a> &nbsp;&nbsp;&nbsp;"
end if

for i = 1 to totalPaginas
   if cPagina = i then
     pageTexto += "<b>" & i & "</b> &nbsp;&nbsp;&nbsp;"
   else
     pageTexto += "<a href=paginacaoSimples.aspx?pagina=" & i & ">" & i & "</a> &nbsp;&nbsp;&nbsp;"
   end if
next i

if cPagina < totalPaginas then
   pageTexto += "<a href=paging.aspx?pagina=" & cPagina + 1 & ">Próxima</a> &nbsp;&nbsp;&nbsp;"
end if

mostraPaginas.text = pageTexto
end sub

O resultado pode ser visto na figura abaixo:

Observe que ao clicar em um dos links para navegação existe uma referência para a própria página indicando qual a página deve ser exibida: Ex: paginacaoSimples.aspx?pagina=3

Aguarde mais artigos sobre ASP.NET.

João 6:14 Vendo, pois, aqueles homens o sinal que Jesus operara, diziam: este é verdadeiramente o profeta que havia de vir ao mundo.

    João 6:15 Percebendo, pois, Jesus que estavam prestes a vir e levá-lo à força para o fazerem rei, tornou a retirar-se para o monte, ele sozinho.
 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti