Ciao a tutti, vista la tremenda fatica (dovutà dal fatto che non sono una cima) nel fare una paginazione come io la desideravo e visto che online non ho trovato nulla di completo e chiaro, ho deciso di inserire il codice da me utilizzato (in parte recuperato e in parte realizzato per le mie esigenze) che considero completo, ma vista la mia non eccelsa bravura chiedo scusa per gli errori e i commenti un pelo banali. Chiedo (con la massima umiltà e gratitudine) ai parecchi esperti tra di voi di suggerirmi eventuali modifiche di codice o di commenti per rendere il tutto molto più chiaro ai poveracci come me che non ne capiscono molto.
<%@LANGUAGE="VBSCRIPT"%>
<%
'La proprietà expires dell'oggetto Response è impostata a zero per il motivo che il browser, in genere, richiama una pagina, in precedenza caricata, dalla CACHE e non dal server, quindi si rischia di visualizzare sempre la stessa pagina, poiché la query inviata dal programma in asp non si aggiorna.
response.expires=0
%>
<% response.buffer=true %>
<%
' PAGINAZIONE COMPLETA
dim ricutente
dim rs
dim cn
set rs = server.CreateObject("Adodb.Recordset")
set cn = server.CreateObject("Adodb.Connection")
'INSERENDO NEL CAMPO DI RICERCA UN NOME LA PAGINAZIONE AGIRA' SOLO SUL RISULTATO DELLA RICERCA
ricutente = Request("ricerca utente")
'SETTA IL NUMERO DI RECORD PER PAGINA
iPageSize = 20
'CONDIZIONE RECUPERO LA POSIZIONE DELLA PAGINA SE E' NULLA MI POSIZIONA SULLA PRIMA
If Request.QueryString("page") = "" Then
iPageCurrent = 1
Else
'ALTRIMENTI CONVERTE IN INTERO E ASSEGNA LA VARIABILE RECUPERATA DAL MENU
iPageCurrent = CInt(Request.QueryString("page"))
End If
' QUESTA CONDIZIONE E' INDISPENSABILE PER VERIFICARE SE LA PAGINAZIONE DEVE LAVORARE IN MODALITA' NORMALE O COME MOTORE DI RICERCA
if ricutente <> "" then
'SOTTO RICERCA APRO LA CONNESSIONE ALLA TABELLA E RECUPERO SOLO LE TUPLE CHE MI SERVONO
cn.Open conn2
sqlstring = "SELECT * FROM Utenti WHERE cognome LIKE '%" & ricutente & "%'"
'-PageSize- METODO DELL'OGGETTO ADODB.RecordSet (per impostare il numero di record di ogni pagina dei risultati)
rs.PageSize = iPageSize
'INDICA IL NUMERO DI RECORD MEMORIZZATI NELLA CACHE LOCALE.
rs.CacheSize = iPageSize
rs.Open sqlstring, cn, adOpenStatic, adLockReadOnly, adCmdText
'-RecordCount- QUESTA PROPRIETA' RESTITUISCE UN VALORE "Long" CHE INDICA IL NUMERO DI RECORD IN UN OGGETTO RECORDSET.
reccount = rs.recordcount
'-PageCount- UTILIZZARE QUESTA PROPRIETA' PER DETERMINARE IL NUMERO DI "PAGINE" DI DATI CONTENUTE NEL RECORDSET.
iPageCount = rs.PageCount
'SE LE PAGINA ATTUALE E' MAGGIORE DELLE PAGINE NEL RECORDSET ASSEGNA A PAGECURRENT PAGECOUNT
If iPageCurrent > iPageCount Then iPageCurrent = iPageCount
'SE LE PAGINE CORRENTI SONO MINORI DI 1 ASSEGNA A PAGECURRENT 1
If iPageCurrent < 1 Then iPageCurrent = 1
'SE NON TROVA RECORD AVVISA L'UTENTE
If iPageCount = 0 Then
Response.Write "
<table><td><font face='verdana' size='2' color='#000000'>Non sono stati trovati utenti.</td></table></p>"
Else
'-AbsolutePage- PER SELEZIONARE LA PAGINA DEI RECORDSET CORRENTE SU CUI POSIZIONARSI
rs.AbsolutePage = iPageCurrent
iRecordsShown = 0
end if
'ALTRIMENTI FA LA STESSA COSA RECUPERANDO TUTTI I DATI DAL DB
else
cn.Open conn2
sqlstring = "Select * From Utenti order by cognome"
rs.PageSize = iPageSize
rs.CacheSize = iPageSize
rs.Open sqlstring, cn, adOpenStatic, adLockReadOnly, adCmdText
reccount = rs.recordcount
iPageCount = rs.PageCount
If iPageCurrent > iPageCount Then iPageCurrent = iPageCount
If iPageCurrent < 1 Then iPageCurrent = 1
If iPageCount = 0 Then
Response.Write "
<table><td><font face='verdana' size='2' color='#000000'>Non sono stati trovati utenti.</td></table></p>"
Else
rs.AbsolutePage = iPageCurrent
iRecordsShown = 0
end if
end if
%>
<html>
<head>
<title>List</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.Stile1 {
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
}
.Stile3 {font-family: Arial, Helvetica, sans-serif; font-weight: bold; font-size: 12px; }
.Stile4 {
color: #FFFFFF;
font-weight: bold;
}
.Stile5 {font-family: Arial, Helvetica, sans-serif}
.Stile8 {font-size: 12px}
.Stile9 {font-family: Arial, Helvetica, sans-serif; font-size: 12px; }
body {
background-color: #e3e9f1;
}
.Stile13 { font-size: 24px;
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
color: #6D879F;
}
-->
</style>
</head>
<body>
<table width="200" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#6D879F">
<tr>
<td width="207" height="0" valign="middle"><form name="form5" method="post" action="pagina.asp">
<label>
<input name="ricerca utente" type="text" id="ricerca utente" value="<%=ricutente%>">
</label>
<label>
<input type="submit" name="ricerca" id="ricerca" value="Invia">
</label>
</form></td>
</tr>
<!-- DA QUI INSERIRE CONTENUTI RECUPERATI DAL db>
<%If ipagecount <> 1 Then%>
<center>
<table>
<tr valign="middle">
<td width="50%" align="center" valign="middle"><font face="verdana" size="1" color="#000000">
[
<%if iPageCurrent-2 > 0 and iPageCurrent > 2 then%>
[img]images/first.gif[/img]
<%end if%>
<%if iPageCurrent > 1 then%>
[img]images/pre.gif[/img]
<%end if%>
<%
if iPageCount > 2 then
if iPageCurrent-2 < 1 then da_pag = 1 else da_pag = iPageCurrent-2
if iPageCurrent+2 > iPageCount then fino_a_pag = iPageCount else fino_a_pag = iPageCurrent+2
else
da_pag = 1
fino_a_pag = iPageCount
end if
%>
<% for i = da_pag to fino_a_pag %>
<%if i = iPageCurrent then%>
<font color="red"><%=i%></font>
<%else%>
<%=i%>
<%end if%>
<%next%>
<%if iPageCurrent > 0 and iPageCurrent < iPageCount then%>
[img]images/next.gif[/img]
<%end if%>
<%if iPageCurrent+1 < iPageCount then%>
[img]images/last.gif[/img]
<%end if%>
]
</font></td>
</tr>
<tr>
<td colspan="2" align="center"><font face="verdana" size="1" color="#000000">
<center>
Pagina
<font color="#FF0000"><%=iPageCurrent%></font>
di
<font color="#FF0000"><%=iPageCount%></font>
</center>
<%end if%>
<%
'CHIUDO LA CONNESIONE
cn.Close
Set cn = Nothing
%>
</body>
</html>


Rispondi quotando