Ir para conteúdo

Arquivado

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

ukow

Paginação em ASP

Recommended Posts

Olá;

Estou criando uma paginação em ASP para exibição de dados do meu banco Access.

Usei o seguinte código:

 

*Inicio da table:

 

Dim intpagina, intrec, i
'Definimos o Numero de Paginas com a propriedade "PageSize" do objeto Recordset
'objRS.PageSize = 1000
rsPlanejamento.PageSize = numeroregpag
'Criamos as Validacoes
if rsPlanejamento.eof then
'' Response.Write("Nenhum Registro Encontrado")
' Response.End() 'paramos o programa
else
'Definimos em qual pagina o visitante está
if Request.QueryString("pagina")="" then
intpagina = 1
else
if cint(Request.QueryString("pagina"))<1 then
intpagina = 1
else
if cint(Request.QueryString("pagina"))>rsPlanejamento.PageCount then
intpagina = rsPlanejamento.PageCount
else
intpagina = Request.QueryString("pagina")
end if
end if
end if
'rslancamento.MoveFirst
rsPlanejamento.AbsolutePage = intpagina
intrec = 0
i = 1
end if
*Final da table

 

<%
Dim UrlExportar
'Criando links para a navegaçao
response.write "<div align='right'><font face=verdana size=2><br><b>Página(s):</b> "
for i = 1 to rsParceiro.pagecount
if i = cint(intpagina) then
response.write "<i><b>" & i & "</b></i> "
session("pagina") = i
else
response.write "<a href='parceiro_lista.asp?pagina=" & i & "'>" & i & "</a> "
UrlExportar = "?pagina="& i
end if
next
response.write "</font></div> "
'Application.lock
'Application.unlock
%>
Funcionou perfeitamente, porém como faço para definir a quantidade de dados exibidas na página?
Se alguém tiver um código simples e bem explicado que funcione para eu ir testando eu agradeço também.
Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá ukow, blza!

 

Segue um exemplo bem simples.

 

CSS

<style type="text/css" media="screen"> 
<!--
.listarGaleria {
  width: 990px;
  position: relative;
}
 
.listarGaleria .listar {
  width: 985px; /* .listarGaleria width - (.listar margin-left + .listar margin-right) */
  overflow: auto;
  height: 500px; /* Ajusta a Altura da Tabela da Galeria ( Para não criar Barra de Rolagem ) */
  margin: 0 35px; /* Ajusta a Distancia da Foto entre a Seta da Esquerda */
  position: relative;
  top: 0;
}
 
.listarGaleria ul a img {
  border: 5px solid #ccc;
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
}
 
.listarGaleria .listar ul {
  width: 985px; /* single item n */
  list-style-image:none;
  list-style-position:outside;
  list-style-type:none;
  margin:10;
  padding:0;
  position: absolute;
  top: 0;
}
 
.listarGaleria ul li {
  display:block;
  float:left;
  padding: 5px; /* Ajusta o Espaçamento da Foto */
  height: 220px; /* Ajusta a Medida da Foto */
  width: 310px; /* Ajusta a Medida da Foto */
}
 
.listarGaleria ul li img {
    -webkit-transition: border-color 400ms;
}
 
.listarGaleria ul:hover li img {
  border-color: #ccc;
}
 
.listarGaleria ul:hover li:hover img {
  border-color: #666;
}
 
.listarGaleria ul li a img {
  display:block;
}

.moldura { 
   padding:5px; 
   background-color: #F4EDDD; 
   width: 270px; 
   border: 1px solid #999999;
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px; 
} 

-->
</style>

ASP

<table width="1003" border="0" cellspacing="0" cellpadding="0">
<tr>
<td colspan="3" class="cor3">


<!-- ***************** INÍCIO da Paginação ********************** -->

<%
Dim pagina, pag, conn, listaProdutos, sql, TotalPages
 
pagina = Request.ServerVariables("Script_Name")
pag = Request.QueryString("pag") 

If pag = "" Then 
pag = 1 ' Determina qual página da paginação será aberta (deixar em 1)  
End if 

Set conn = CreateObject("adodb.connection")
conn.open "provider=microsoft.jet.oledb.4.0; data source=" & server.mappath("sua_base_dados.mdb")

Set listaProdutos = CreateObject("adodb.recordset")

Set listaProdutos.ActiveConnection = conn

sql = "SELECT * FROM categorias Where id Order by nome"

listaProdutos.CursorType = 3 'Tipo do cursor do RecordSet 
listaProdutos.PageSize = 6 'Qtde de registros a serem exibidos por página 
listaProdutos.Open sql 
TotalPages = listaProdutos.PageCount
%>

<%
If listaProdutos.Eof Then 

Response.Write "<br>"
Response.Write "<center><font color=red><font size=4>Nenhum Produto Cadastrado.</font></font></center>"
Response.Write "<br>"

Else
%>

<div class="listarGaleria">
      <div class="listar">
        <ul>
 
<%
Dim contador, maxcol, listar_id 
contador = 0 
maxcol = 3
listaProdutos.AbsolutePage = pag 
While Not listaProdutos.EOF And i < listaProdutos.PageSize i = i + 1
listar_id = listaProdutos("id")
%>

<%  
	If contador <= maxcol Then 
%>

	<li>
<div align="center">
<a class="listaProdutos" href="./listaProdutos.asp?lista=produtos&nome_cat=<%=listaProdutos("id")%>&categoria=<%=listaProdutos("nome")%>"><%=listaProdutos("nome")%>
<div align="center"><%=listaProdutos("nome")%></div>
</a>  
</div>
   
<% 
contador = contador + 1 
Else 
%>
 
</li>
 
	<li>
<div align="center">  
<a class="listaProdutos" href="./listaProdutos.asp?lista=produtos&nome_cat=<%=listaProdutos("id")%>&categoria=<%=listaProdutos("nome")%>"><%=listaProdutos("nome")%>
<div align="center"><%=listaProdutos("nome")%></div>
</a>  
</div>   

<% 
	  contador = 1 
	End If 
  listaProdutos.MoveNext 
Wend
 
Do While contador <= maxcol 
%>

<%  
contador = contador + 1 
Loop 
%> 

</li>

        </ul>        
      </div>
    </div>

<br>

<table width="990" border="0" align="center" cellpadding="1" cellspacing="1">
	<tr> 
		<td>
<div align="center">        
<span class="txtPaginacao"> Página <b><%=pag%></b> de <b><%=TotalPages %></b> </span>

<br /> 

<%
Dim max_n_mostrados, intervalo, inicio, final, i 
max_n_mostrados = 500

intervalo = Int(max_n_mostrados /2)
inicio = pag - intervalo
final = pag + intervalo

If CInt(inicio) <1 Then 
 inicio = 1 ' 
 final = 50 ' Número máximo de páginas que será exibidas, exemplo: (1 - 2 - 3 - 4 ... 50)
End If

If CInt(final) > CInt(TotalPages) Then final = TotalPages

For i = inicio To final
	 If CInt(i)=CInt(pag) Then
		 Response.Write "<span class=txtPaginacao> [" & i & "] </span>"
	 End If
	 
	 If CInt(i) < CInt(pag) Then
	 
	  Response.Write "<a class=paginacao href='"&pagina&"?pag=" & i & "'>" & i & "</a> "
	  
	 End If
	 
	 If CInt(i) > CInt(pag) Then
	 
		 Response.Write "<a class=paginacao href='"&pagina&"?pag=" & i & "'>" & i & "</a> "
		 
  End If
  
Next
%>

</div>

</td>
  </tr>
</table>

<%
listaProdutos.Close 
Set listaProdutos = Nothing 
End If

%>
<!-- ***************** FIM da Paginação ********************** -->

    </td>
  </tr>
</table>

Ele é bem simples e está comentado,

 

 

Ele irá criar Nova Página a cada 6 Registro exibidos

A Paginação ficará assim:

------------------------------------------------------------

Página 1 de 15

[1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15

------------------------------------------------------------

 

 

Espero que ajude.

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

outro exemplo

 

existem alguns exemplos ótimo de páginação no fórum, e você pode comparar a lógica, olha este

code de PAGINAÇÃO que é muito bom simples e bem funcional.

espero ajudar de alguma maneira




<%
' Definindo o caminho do banco de dados
caminho = "bds/cadastro.mdb"

' Fazendo a conexão com o banco de dados (paginacao.mdb)
set objconn = Server.CreateObject("ADODB.Connection")
DSN = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(caminho)
objconn.Open DSN

' String SQL para consulta
SQL = "select * from cadastro order by cliente"

' Abrindo o registro
SET objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open SQL,objconn,3

' Se não encontrar nada escreve a mensagem
' Senão lista os registros
If objRS.EOF Then
Response.Write("Nenhum registro foi encontrado")
Else
' Definindo o número de registros por página
objRS.PageSize = 10

' Recupera o valor da variável pagina
pagina = Request.QueryString("pagina")

' Se a variável pagina for vazio, indica que a página sera a primeira
' Senão a variável pagina recebe o valor da página corrente, definida acima
If pagina = "" Then
objRS.AbsolutePage = 1
pagina = 1
Else
objRS.AbsolutePage = pagina
End If
%>
<%
' Imprime o número de registros, o total de páginas e a página atual
Response.Write("<table><tr><td><FONT FACE=Verdana SIZE=1 COLOR=#000000><B>Foram encontrados" & objRS.RecordCount & " registros" & vbcrlf )
Response.Write("<br>Mostrando página <b>" & pagina & "</b> de <b>" & objRS.PageCount & "" & vbcrlf )
Response.Write("<br><FONT FACE=Verdana SIZE=1 COLOR=#000000><B>Busca Avançada <a href='#' onClick=javascript:window.open('../busca_avc.asp','','width=200,height=50,scrollbars=no, resizable=no,left=00,top=0');>aqui</a></B></FONT></td></tr></table>")
%>

<%
' Criando a barra de navegação
' Se a variável pagina for maior que 1 então imprime o botão Anterior com link
' Senão imprime sem link
If CInt(pagina) > 1 Then
Response.Write("<center><FONT FACE=Verdana SIZE=1 COLOR=#000000><B><a href='" & Request.ServerVariables("SCRIPT_NAME") & "?pagina=" & pagina-1 & "'>Anterior</a> ")
Else
Response.Write("<center><FONT FACE=Verdana SIZE=1 COLOR=#000000><B>Anterior")
End If

' Lista todas as páginas encontradas
if objRs.PageCount < 11 then
 For i = 1 To objRS.PageCount
   response.write("<a href='" & Request.ServerVariables("SCRIPT_NAME") & "?pagina=" & i & "'>" & i & "</a> ")
 Next
end if

if objRs.PageCount > 10 then
     inicio=pagina
     fim=pagina + 9
     tot = pagina + 9
     if tot > ObjRS.PageCount then
       inicio = pagina-((pagina+9)-ObjRs.PageCount)
       fim = inicio+9
     end if
     for i = inicio to fim
         response.write("<a href='" & Request.ServerVariables("SCRIPT_NAME") & "?pagina=" & i & "'>" & i & "</a> ")
     next
end if


' Se a variável pagina for menor que o total de páginas então imprime o botão Próxima com link
' Senão imprime sem link
If CInt(pagina) < objRS.PageCount Then
Response.Write("<a href='" & Request.ServerVariables("SCRIPT_NAME") & "?pagina=" & pagina+1 & "'>Próxima</a></B></FONT></center>")
Else
Response.Write("Próxima</B></FONT></center>")
End If
End If
%>




<%While Not objRS.EOF AND cont < objRS.PageSize%>
<tr bgcolor="#0099CC" bordercolor="0">
   <td height="7" width="110" align="left"><font size="1" face="Verdana"><b><%=objRS("cliente")%></b></font></td>
   <td height="7" width="110" align="center"><font size="1" face="Verdana"><b><%=objRS("fone")%></b></font></td>
   <td height="7" width="83" align="center"><font size="1" face="Verdana"><b><%=objRS("endereco")%></b></font></td>
   <td height="7" width="70" align="center"><font size="1" face="Verdana"><b><%=objRS("numero")%></b></font></td>
   <td height="7" width="107" align="center"><font size="1" face="Verdana"><b><%=objRS("bairro")%></b></font></td>
   <td height="7" width="55" align="center">
   <a href="../action_altera.asp?id=<%=objRS("id")%>" OnClick="return confirm('Deseja Realmente Alterar ?')">
   <img src="imagens/edit.gif" width="16" height="16" border="0" alt="Clic aqui para Alterar.">
   </a>  
 </td>
<%
cont = cont + 1
objRS.MoveNext
Wend
%>
</tr>
</table>
<%
' Fecha e destroi os objetos RS e conn
objRS.Close : objconn.Close
Set RS = Nothing : Set objconn = Nothing
%>

O estilo Css da paginação está parecido com o estilo do Digg e as classes Css foram adaptadas de um site que achei na internet. Como todo bom programador, segue abaixo o link deste Css para que sejam mantidos os creditos ao autor original: Estilo Css Digg

Agora que fizemos as devidas referências, vamos ao código.

Vou colocar ele todo comentado para não ter dúvida e vamos desde o inicio:

Estilo Css usado na páginação

<style>
#pages {
        padding: 3px;
}
#pages ul {
        list-style-type: none;
}
#pages li {
        float: left;
        display: inline;
        margin: 0 5px 0 0;
        display: block;
}
#pages li a {
        color: #88af3f;
        padding: 4px;
        border: 1px solid #ccdbe4;
        text-decoration: none;
        float: left;
}
#pages li a:hover {
        color: #fff;
        background-color: #3666d4;
        border: 1px solid #2b55af;
}
#pages li.nolink {
        color: #CCC;
        border: 1px solid #F3F3F3;
        padding: 4px;
}
#pages li.current {
        color: #FFF;
        border: 1px solid #2b55af;
        padding: 4px;
        background-color: #3666d4;
}
</style>





Código ASP

<%
''' Declaração de variáveis
Dim cnProdutos, rsProdutos, strSQLProdutos
Dim cdblMat, intInicioPaginasRegistros, pAtual, fimRegistros
Dim iTotalReg, iTotalPaginas, sLink
Dim intervalo, intInicioPaginas, intFinalPaginas, intMaxLinksNavegacao

''' Recupera a página atual
pAtual = Request.QueryString("pAtual")

''' Consulta SQL
strSQLProdutos = "select campo1, campo2 from sua_tabela order by campo3;"

''' Criação dos Objetos
Set cnProdutos = Server.CreateObject("ADODB.Connection")
Set rsProdutos = Server.CreateObject("ADODB.Recordset")
cnProdutos.Open "driver={MySQL ODBC 3.51 Driver};server=NOME_SERVIDOR;database=NomeBaseDados;uid=NomeUsuarioBanco;pwd=SenhaUsuarioBanco;"


''' Total de registros por pagina
fimRegistros = 20

''' Total de links exibidos na tela
intMaxLinksNavegacao = 10

''' Define a página atual
If pAtual =  "" Or pAtual <= 0 Then
  pAtual = 1
End If

''' Diz ao MySQL o inicio do filtro de linhas.
''' Inicialmente vamos iniciar da linha Zero
cdblMat = pAtual -1
intInicioPaginasRegistros = cdblMat * fimRegistros

''' Pega o total de registros do banco
iTotalReg = cnProdutos.Execute("select count(campo1) from sua_tabela").Fields(0).Value


''' Cálculo para ver o total de páginas que terá a paginação.
If Cint(iTotalReg) > CInt(fimRegistros) Then
   iTotalPaginas = Round(Cint(iTotalReg) / Cint(fimRegistros))
Else
   iTotalPaginas = 1
End If

''' coloque aqui, tudo o que for comum na sua querystring do site
''' valores que sempre serao os mesmos, com isso vc economiza na
''' hora que for montar os links de paginação
sLink = "pagina.asp?parametro1=valor1&parametro2=valor2"

''' Certifica-se de que a pagina atual nunca será maior que o total de paginas
If Cint(pAtual) > iTotalPaginas Then
   pAtual = iTotalPaginas
End If

''' Configura o intInicioPaginas e o fim dos registros no banco
strSQLProdutos = strSQLProdutos & " limit " & intInicioPaginasRegistros & "," & fimRegistros

rsProdutos.CursorLocation = 3
rsProdutos.Open strSQLProdutos, cnProdutos, 3, 3

If Not rsProdutos.EOF Then
   Response.Write "<table>" & vbcrLf
   Response.Write " <tr>" & vbcrLf
   Response.Write "  <td>" & vbcrLf
   Do While Not rsProdutos.EOF
    Response.Write "Campo 1: " & rsProdutos("campo1") & " - Campo 2: "& rsProdutos("campo2") &" <br />" & vbcrLf
    rsProdutos.MoveNext
   Loop
   Response.Write "  </td>" & vbcrLf
   Response.Write " </tr>" & vbcrLf
End If

''' =========================================================
''' Iniciamos a Paginação
''' =========================================================
Response.Write "        <tr>" & vbcrLf
Response.Write "                <td>" & vbcrLf
Response.Write "                        <B><strong> Página " & pAtual & " de " & iTotalPaginas & " </strong></B> - " & vbcrLf
Response.Write "                </td> - " & vbcrLf
Response.Write "        </tr>" & vbcrLf

Response.Write "        <tr>" & vbcrLf
Response.Write "         <td>" & vbcrLf
Response.Write "          <div id='pages'>" & vbcrLf
Response.Write "           <ul>" & vbcrLf

''' Botões Primeira e Anterior. Só serão exibidos
''' se a página atual não for a primeira página
If pAtual > 1 Then
        Response.Write " <li><a href='"& sLink &"&pAtual=" & 1 & "'>Primeira</a></li>"
        Response.Write " <li><a href='"& sLink &"&pAtual=" & pAtual - 1 & "'>Anterior</a><li>"
End If

''' Configura o intInicioPaginas e o fim dos registros para consulta ao banco
intervalo = Int(intMaxLinksNavegacao / 2)
intInicioPaginas = pAtual - intervalo
intFinalPaginas = pAtual + intervalo

''' Se o intInicioPaginas for menor que 1 passa seu valor para 1
If CInt(intInicioPaginas) < 1 Then
        intInicioPaginas = 1
        intFinalPaginas = intMaxLinksNavegacao
End If

''' Garante que a última página nao vai ser maior que o total
''' de páginas calculado para a consulta
If CInt(intFinalPaginas) > CInt(iTotalPaginas) Then intFinalPaginas = iTotalPaginas
If intFinalPaginas > intMaxLinksNavegacao Then intFinalPaginas = intFinalPaginas - 1


''' Começa a escrever os links na tela
For i = intInicioPaginas To intFinalPaginas
        If CInt(i)=CInt(pAtual) Then
                Response.Write " <li class='current'>" & i & "</li> "
        End If
        If CInt(i) < CInt(pAtual) Then
                Response.Write " <li><a href='"& sLink &"&pAtual=" & i & "'>" & i & "</a></li> "
        End If
        If CInt(i) > CInt(pAtual) Then
                Response.Write " <li><a href='"& sLink &"&pAtual=" & i & "'>" & i & "</a></li> "
        End If
Next

''' Botões Próxima e Última página. Só serão exibidos
''' se a página atual nao for a última página
If CInt(pAtual) < CInt(iTotalPaginas) Then
        Response.Write " <li><a href='"& sLink &"&pAtual=" & pAtual + 1 & "'>Próxima</a></li>"
        Response.Write " <li><a href='"& sLink &"&pAtual=" & iTotalPaginas & "'>Última</a></li>"
End If
Response.Write "                                </div>" & vbcrLf
Response.Write "                        </ul>" & vbcrLf
Response.Write "                </td>" & vbcrLf
Response.Write "        </tr>" & vbcrLf
Response.Write "</table>" & vbcrLf
%>

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.