Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288

    CPager. Classe per la paginazione dei Recordset

    Salve a tutti, pubblico questa classe per la paginazione dei recordset.L'esempio commentato dovrebbe rendere un idea di come funziona:
    codice:
    <%
    Set cPage = new cPager
    'I record per pagina
    cPage.RecordPerPage  = 5
    'Imposto il numero di pagine visibili da spezzare in blocchi
    cPage.PageBlockSize  = 10 
    ' Verra' in questo modo visualizzato 
    '[1-10] 11 12 13 14 15 16 17 18 19 20 [21-30]
    'Imposto la variaibile che determinera' la pagina ( non serve testare 'se 0 o fare il cInt,tutto è delegato alla classe
    cPage.Page  = Request("Pagina")
    'ESEMPIO DI UN RECORDSET CREATO GIA' CON I GIUSTI CURSORI
    SQLProdotti = 	"SELECT * FROM T_FATTURE;"
    Set Rs = Server.CreateObject("ADODB.RecordSet")
    Rs.CursorType = 3
    Rs.CursorLocation = 3
    Rs.LockType = 3
    Rs.ActiveConnection = connessione
    Rs.Source = SQLProdotti
    Rs.Open
    ' Carico ed inizializzo le variabili (il 2 parametro se true distrugge il recordset
    cPage.LoadRs  Rs,false 
    'In alternativa del settare i cursori si puo' delegare alla funzione di fare cio' 
    Il metodo OpenRecordSet accetta il nome del Recordset, la connessione,ed il sql ed apre il recordset
    'con i giusti cursori ( e non serve rieseguire il metodo LoadRs )
    Rs.Close
    cPage.OpenRecordSet   Rs,Connessione,SQLProdotti 
    k = 0
           'Limito i record con la variabile RecordPerPage
    	while not Rs.eof and k < cPage.RecordPerPage   		'.......semplice output per esempio
    			
    		Response.Write(Rs.absolutePosition & " " & Rs("data") & " " & Rs("descrizione") & "
    ")
    		Rs.movenext
    		k = k + 1
    	wend
    Rs.Close
    Set Rs = nothing
    %>
    <hr>
    TOTALE PAGINE = <%=CPage.TotalPage %>
    	 
    Mostro il record dal numero <%=CPage.FromRecord %> al numero <%=CPage.ToRecord %>
    
    <hr>
    <%
    'ed ora stampo le pagine
    if not CPage.isOnePage  then 'IsOnePage è un booleano che è impostato a true se è una pagina sola  %>
    	<div align="center"> 
    	<table border="0" width="100%" cellpadding="0" cellspacing="0" height="25">
    	<tr> 
    	  <td valign="middle" align="right" width="10%"> 
    	    <% ' QUI APPARIRANNO I BLOCCHI PRECENDENTI ES. [PAG DA 1-10]
    		   'PreviousPageSeries è uno shortcut per la stampa di 
    		   'CPage.PreviousPageFrom  (prima pagina del blocco precedente
    		   'e CPage.PreviousPageTo  (ultima pagina del blocco precedente)
    		   'Ma utile perchè sono stati gia' fatti i controlli del tipo se la pagina PreviousPageFrom è la stessa di PreviousPageto stampa solo l'unica pagina	
    		    if CPage.HasPreviousPageBlock  then 'SE ESISTE UN BLOCCO PRECEDENTE%>
    				[<%=CPage.PreviousPageSeries%>] 
    		<%	end if %>
    	  </td>
    	  <td valign="middle" align="center" width="10%"> 
    		<%	if CPage.HasPreviousPage  then ' PER SAPERE SE ESISTE UNA PAGINA PRECEDENTE %>
    			&lt;&lt; 
    		<%	end if %>
    	  </td>
    	  <td  valign="middle" align="center" width="60%"> 
    		<%  'in startpage si avra' dalla prima pagina del blocco corrente 
    ' esempio blockpage= 10, pagina = 13 , start page sara' uguale a 11 e end page a 19 	
    			for i=cPage.StartPage  to cPage.EndPage 
    				if i=cPage.CurrentPage  then 'Current page è la pagina corrente%>
    					<%=i%> 
    				<%	else %>
    					<%=i%> 
    			<%	end if  
    			next %>
    	  </td>
    	  <td valign="middle" align="center" width="10%"> 
    		<%	' PER SAPERE SE ESISTE UNA PAGINA SUCCESSIVA	
    			if cPage.HasNextPage   then %>
    		&gt;&gt; 
    		<%	end if %>
    	  </td>
    	  <td valign="middle" align="left" width="10%"> 
    		<% ' QUI APPARIRANNO I BLOCCHI SUCCESSIVI ES. [PAG DA 20 -29 ]
    		   'NextPageSeries è uno shortcut per la stampa di 
    		   'CPage.NextPageFrom  (prima pagina del blocco successivo
    		   'e CPage.NextPageTo  (ultima pagina del blocco successivo)	
    		     if CPage.HasNextPageBlock  then %>
    		[<%=CPage.NextPageSeries %>] 
    		<%	end if %>
    	  </td>
    	</tr>
    	</table>
    	</div>
        <% 	end if 
    Set CPage = nothing %>
    Le proprieta che vi che vi ritrovate a disposizione sono:

    RecordPerPage = (int) scrittura/lettura IMPOSTA I RECORD PER
    PAGINA
    PageBlockSize = (int) scrittura/lettura IMPOSTA I BLOCCHI PAGINA
    Page = (int) scrittura/lettura IMPOSTA LA PAGINA CORRENTE
    TotalPage = (int) lettura RESTITUISCE IL NUMERO TOTALE DELLE
    PAGINE
    FromRecord = (int) lettura RESTITUISCE IL NUMERO DEL RECORD DA
    CUI INIZIA LA VISUALIZZAZIONE PER LA PAGINA CORRENTE
    ToRecord = (int) lettura RESTITUISCE IL NUMERO DEL RECORD DA
    CUI FINISCE LA VISUALIZZAZIONE PER LA PAGINA CORRENTE
    isOnePage = (bool) lettura RESTITUISCE TRUE SE IL RECORDSET E'
    UNA PAGINA SOLA , FALSE NEL CASO CONTRARIO
    StartPage = (int) lettura RESTITUISCE IL NUMERO INIZIALE DELLE
    PAGINE PER IL BLOCCO CORRENTE
    esempio se avete impostato PageBlockSize a 5 pagine se vi trovate nella pagina 8
    StartPage (int) lettura ha valore 6 (siete nel secondo blocco)
    EndPage = (int) lettura RESTITUISCE IL NUMERO FINALE DELLE PAGINE
    per PER IL BLOCCO CORRENTE
    esempio se avete impostato PageBlockSize a 5 pagine se vi trovate nella pagina 8
    EndPage ha valore 10 (siete nel secondo blocco)
    HasPreviousPage = (bool) lettura RESTITUISCE TRUE SE IL RECORDSET
    HA UNA PAGINA PRECEDENTE, FALSE NEL CASO CONTRARIO
    HasNextPage = (bool) lettura RESTITUISCE TRUE SE IL RECORDSET
    HA UNA PAGINA SUCCESSIVA, FALSE NEL CASO CONTRARIO
    NextPage = (int) lettura RESTITUISCE la pagina successiva
    PreviousPage = (int) lettura RESTITUISCE la pagina precente
    CurrentPage = (int) lettura RESTITUISCE la pagina corrente
    HasPreviousPageBlock = (bool) RESTITUISCE TRUE SE ESISTONO BLOCCHI
    PRECEDENTI AL CORRENTE, FALSE NEL CASO CONTRARIO
    HasNextPageBlock = (bool) RESTITUISCE TRUE SE ESISTONO BLOCCHI
    SUCCESSIVI AL CORRENTE, FALSE NEL CASO CONTRARIO
    PreviousPageFrom = (int) RESTITUISCE LA PRIMA PAGINA DEL BLOCCO
    PRECEDENTE
    Esempio vi trovate nella 21 pagina con PageBlockSize = 10
    PreviousPageFrom vale 11
    PreviousPageTo vale 20
    PreviousPageTo = (int) lettura RESTITUISCE L'ULTIMA PAGINA DEL BLOCCO
    PRECEDENTE
    Esempio vi trovate nella 11 pagina con PageBlockSize = 10
    PreviousPageTo vale 10
    PreviousPageFrom vale 1

    NextPageFrom = (int) lettura RESTITUISCE LA PRIMA PAGINA DEL BLOCCO SUCCESSIVO
    Esempio vi trovate nella 21 pagina con PageBlockSize = 10
    NextPageFrom vale 31
    NextPageTo vale 40
    NextPageTo = (int) lettura RESTITUISCE L'ULTIMA PAGINA DEL BLOCCO SUCCESSIVO
    Esempio vi trovate nella 1 pagina con PageBlockSize = 10
    NextPageFrom vale 11
    NextPageTo vale 20

    NextPageSeries = (string) short cut che stampa NextPageFrom - NextPageTo tenendo presente che se NextPageFrom e NextPageTo hanno
    valore identico stampa solo un valore
    PreviousPageSeries = (string) short cut che stampa PreviousPageFrom - PreviousPageTo tenendo presente che se PreviousPageFrom e PreviousPageTo
    hanno valore identico stampa solo un valore

    Invece di seguire la strada come nell'esempio precedente tramite la funzione
    CreateRecordSet(Connection,SQL) viene creato l'oggetto recordset all'interno dello oggetto CPager.

    A quel punto il recordset si trova all'interno dell'oggetto [NomeInstanzaCPager].RecordSet

    codice:
    <%
    Set cPage = new cPager
    connessione = "...bla blablalba" & Server.MapPath("prove.mdb")
    cPage.RecordPerPage  = 5
    cPage.PageBlockSize  = 10 
    cPage.Page  = Request("Pagina")
    cPage.CreateRecordSet connessione,"SELECT * FROM T_FATTURE;"
    with CPage
    	kk = 0 
    	while not .Recordset.eof and kk < .recordPerPage
    			Response.Write(.Recordset.absolutePosition & " " & .Recordset("data") & " " & .Recordset("descrizione") & "
    ")
    		.Recordset.movenext
    		kk = kk + 1
    	wend 
    .Recordset.Close
    'stesso codice dell'esempio per stampare le pagine , non cambia nulla.
    end with
    set cPage= nothing
    %>
    Spero che la classe possa essere utile per qualcuno.
    P.s sebbene funzioni anche su MySql, per le query con tanti risultati
    le performance con LIMIT sono superiori a questa classe. Se poi avro' tempo di implementarla faro' una procedura a posta per MySql

    ALLEGO la classe zip di 10 kb con 2 esempi: uno con l'aggiunta di una paginazione ad un recordset esistente, l'altra con la creazione del recordset all'interno dell'oggetto
    Sono ben accetti feedback e logicamente bug scovati

  2. #2
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    httpl'allegato è zip non lo fa caricare
    un attimo lo metto da qualche parte

  3. #3
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    http://mio.discoremoto.virgilio.it/asppertutti/
    il file è cPager_paginazioneRecordset.zip

  4. #4
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    nemmeno un feedback o qualcuno che l'abbia provata?
    strano credevo potesse tornare utile

  5. #5
    Utente bannato
    Registrato dal
    Nov 2002
    Messaggi
    661
    ciao kluster,

    ho appena scaricato la classe e tra un po li do un occhiata

    per il momento grazie


    P.S il tuo nik è inteso come kluster dei dischi o come kluster di cpu ? :maLOL:

  6. #6
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    mah,come ti pare, inizialmente era un nick di riserva ormai diventato primario.

  7. #7
    Utente bannato
    Registrato dal
    Nov 2002
    Messaggi
    661





    DAMMELO LO VOGLIO IO !!!!

    PERCHE' NON CI HO PENSATO PRIMA IO

  8. #8
    gli esempi non fungono...le pagine sono scritte male.
    Se ci fosse anche un db allegato con i record da sfogliare sarebbe più semplice da checkare
    In compenso il componente per le immagini rulla (l'ho dovuto riscaricare però, perchè quello nel tuo sito, non ne vuole sapere di installarsi)

  9. #9
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    gli esempi fungono

    le pagine sono scritte male in che senso?

    il db basta che cambi la stringa di connessione e ti metti il tuo db

    il componente lo uso tuttora sicchè non so che dirti cmq lo riscarichero' e ricreero' il file zip

  10. #10
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    nel caso posta l'errore

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.