Je publierai d'abord le code source de la classe de pagination, puis je publierai quelques exemples pour expliquer son utilisation et comment étendre ses fonctions lorsque j'en aurai le temps.
Le code original de la classe est le suivant :
< %
'===============================================
'Version XDOWNPAGE ASP
'Version actuelle : 2.0
'
'
'Version originale 1.00
'Code par zykj2000
'E-mail : [email protected]
'BBS : http://bbs.513soft.net
'
'
'Version de mise à niveau : 1.5 (asp + oracle)
mis à jour par double
E-mail:
blog : ttp://blog.csdn.net/double/
'Instructions de mise à niveau :
'
'
'Version de mise à niveau : 2.0' (asp + oracle) ---->Version actuelle
'Conserver le nom d'origine : XDOWNPAGE
Mis à jour par northsnow
'e-mail : [email protected]
'blog : http://blog.csdn.net/precipitant
'Instructions de mise à niveau :
'1, lors de l'interrogation de données, seuls les enregistrements contenus dans la page actuelle sont interrogés, ce qui réduit considérablement la quantité de transmission de données.
'2, si la navigation dans les pages est normale, vous n'avez pas besoin d'interroger le nombre total d'enregistrements à chaque fois, à condition de l'interroger pour la première fois, puis de le transmettre via des paramètres.
'3, prend en charge le changement dynamique de la taille de la page
'4, prend en charge le tri dynamique
'5, ce programme ne prend en charge qu'Oracle, si vous souhaitez l'utiliser dans sqlserver ou d'autres types de bases de données, veuillez le modifier vous-même : Public Property Let GetSQL(str_sql).
'
'
« Pour d'autres informations sur le modificateur de programme, veuillez les vérifier dans le code source ! ! !
« Ce programme peut être utilisé, modifié, copié, reproduit et cité gratuitement. J'espère que mon programme pourra apporter de la commodité à votre travail.
« Mais s'il vous plaît, conservez les informations ci-dessus, en particulier les informations originales. De plus, s'il est utilisé à des fins commerciales, veuillez mettre à niveau avec l'œuvre originale et cette version.
'Contactez pour obtenir l'autorisation.
'
'
'Fonctionnalités du programme
« Ce programme encapsule principalement la partie pagination des données, et la partie affichage des données est entièrement personnalisée par l'utilisateur.
'Prend en charge plusieurs paramètres d'URL
'
'Mode d'emploi
'Description des paramètres du programme
'PapgeSize définit le nombre d'enregistrements sur chaque page de pagination
'GetRS renvoie le Recordset paginé. Cette propriété est en lecture seule.
'GetConn obtient la connexion à la base de données
'GetSQL obtient l'instruction de requête
'totalRecordCount transmet le nombre total d'enregistrements
' description de la méthode du programme
'ShowPage affiche la barre de navigation de pagination, la seule méthode publique
'ShowPageSizeChange() affiche une liste des tailles de page modifiées
'
'exemple:
'
'' 'Inclure les fichiers
'
'Set mypage=new xdownpage 'Créer un objet
'mypage.getconn=conn 'Obtenir la connexion à la base de données
' mypage.getsql="select * from productinfo order by id asc"
' mypage.pagesize=5 'Définissez les données d'enregistrement de chaque page sur 5
'mypage.totalRecordCount=rsTotalCount définit le nombre total d'enregistrements
'set rs=mypage.getrs() 'Retour du jeu d'enregistrements
'mypage.GetSubmitForm="frmQuery" 'Le formulaire soumis par défaut pour la pagination, paramètre currentpage
'Response.write(mypage.GetSubmitForm1()) 'Fonction de soumission de pagination de sortie
' mypage.showpage() 'Afficher les informations de pagination. Cette méthode peut être utilisée après avoir défini rs=mypage.getrs().
"Appelle n'importe où, peut être appelé plusieurs fois
' do while not rs.eof 'L'opération suivante est la même que l'utilisation d'un objet Recordset ordinaire.
' réponse.écrire rs(0) & "
' " 'Ici, vous pouvez personnaliser la méthode d'affichage
'rs.
' boucle
'
'Ajout d'un script de soumission pour enregistrer le numéro de page actuel
'La fonction est GetSubmitForm()
'Besoin de soumettre un nom de formulaire à la fonction GetSubmitForm
'Enregistrez les quatre paramètres des variables flag, currentpage, pagesize, rsTotalCount dans ce formulaire soumis
'L'exemple est le suivant
'drapeau=requête("drapeau")
'pageactuelle=requête("pageactuelle")
'pageactuelle=requête("taille de la page")
'currentpage=request("rsTotalCount")
'Ajoutez les quatre entrées suivantes au formulaire soumis
'<input name="flag" type="hidden" value="< % =flag% >">
'<input name="currentpage" type="hidden" value="< % =currentpage% >">
'<input name="pagesize" type="hidden" value="< % =pagesize% >">
'<input name="rsTotalCount" type="hidden" value="< % =rsTotalCount% >">
'==============================================
Const Btn_First= "<font face=""webdings"">9</font>" 'Définir le style d'affichage des boutons sur la première page
Const Btn_Prev="<font face=""webdings"">3</font>" 'Définir le style d'affichage du bouton de la page précédente
Const Btn_Next="<font face=""webdings"">4</font>" 'Définir le style d'affichage du bouton de la page suivante
Const Btn_Last="<font face=""webdings"">:</font>" 'Définir le style d'affichage du bouton de la dernière page
Const XD_Align="center" 'Définir l'alignement des informations de pagination
Const XD_Width="100%" 'Définit la taille de la boîte d'informations de pagination
Const XD_Height="20"
Classe Xdownpage 'La classe commence ici
' définition de la variable
public int_totalPage 'Nombre total de pages
public int_curcount 'Nombre d'enregistrements sur la page actuelle
public XD_PageSize 'Taille de la page
Private int_curpage 'Numéro de la page actuelle
Private int_totalRecord 'Nombre total d'enregistrements
Objet de connexion à la base de données privé XD_Conn
Objet de jeu d'enregistrements privé XD_Rs
Instruction SQL principale privée XD_SQL
Instruction SQL privée XD_Count_SQL 'pour interroger le nombre total d'enregistrements
Erreurs str_privées
str_URL privée
XD_sURL privée
Private SubmitForm 'Nom du formulaire de requête requis (masquer le nom du formulaire)
'================================================== = ================
'Propriété TaillePage
'Définir la taille de pagination de chaque page
'================================================== = ================
Propriété publique Laisser PageSize(int_PageSize)
Si IsNumeric (Int_Pagesize) Alors
si clng(Int_Pagesize)>0 alors
XD_PageSize=CLng(int_PageSize)
autre
XD_PageSize=10
finir si
Autre
XD_PageSize=10
Fin si
Propriété de fin
Propriété publique Obtenir la taille de la page
Si XD_PageSize="" ou (not(IsNumeric(XD_PageSize))) Alors
Taille de la page = 10
Autre
Taille de la page = XD_Taille de la page
Fin si
Propriété de fin
'================================================== = ================
'Propriété GetRS
'Renvoyer le jeu d'enregistrements paginé
'================================================== = ================
Propriété publique Obtenir GetRs()
Définir XD_Rs=Server.createobject("adodb.recordset")
'XD_Rs.PageSize = Taille de la page
XD_Rs.CursorLocation=3
XD_Rs.Open XD_SQL,XD_Conn,3,1
int_curcount=XD_Rs.RecordCount
si int_totalRecord="" ou non isNumeric(int_totalRecord) alors int_totalRecord=0 'Normalise la valeur de int_totalRecord
si int_totalRecord=0 et (int_curcount>=PageSize ou int_curpage>1) alors appelez queryRsCount() 'Interrogez le nombre total d'enregistrements
si numéro d'erreur <>0 alors
Réponse.Écrire erreur.Effacer
finir si
Définir GetRs=XD_RS
Propriété de fin
'=============================================== = =================
'Méthode queryRSCount
'Requête du nombre total d'enregistrements
'================================================== = ================
Sous-requête publiqueRsCount()
'Le code suivant est utilisé pour calculer le nombre total d'enregistrements
si XD_Count_SQL<>"" alors
set rs_sqlcount=server.createobject("adodb.recordset")
rs_sqlcount.CursorLocation=3
rs_sqlcount.open XD_Count_SQL,conn,3,1
si (rs_sqlcount.eof et rs_sqlcount.bof) alors
int_totalRecord=0
autre
int_totalRecord=rs_sqlcount(0)
int_totalRecord=clng(int_totalRecord)
finir si
rs_sqlcount.close
définir rs_sqlcount = rien
finir si
Fin du sous
'================================================ = =================
'GetConn obtient la connexion à la base de données
'
'================================================== = ===============
Propriété publique Let GetConn (obj_Conn)
Définir XD_Conn=obj_Conn
Propriété de fin
'=============================================== = ================
'GetSQL obtient l'instruction de requête
'
'================================================== = ===============
Propriété publique Let GetSQL(str_sql)
si (str_sql<>"") alors
'En fonction de l'instruction de requête donnée, générez l'instruction de requête finale (ne prenez que le contenu de la page actuelle) : convient à la base de données Oracle.
XD_SQL=" select * from (select rownum r_n,temptable.* from ("
XD_SQL=XD_SQL&str_sql
XD_SQL=XD_SQL&" ) temptable ) où r_n entre " & cstr((int_curpage -1) * XD_PageSize +1) & " et " & cstr(int_curpage * XD_PageSize)
'Instruction de requête pour interroger le nombre total d'enregistrements
XD_Count_SQL="sélectionnez le nombre (*) à partir de ("& str_sql & ")"
finir si
Propriété de fin
'================================================== = ===============
'La propriété GetSubmitForm définit le formulaire pour les conditions de requête
'
'================================================== = ===============
Propriété publique Let GetSubmitForm(frmName)
SoumettreForm=trim(frmName)
Propriété de fin
'=============================================== = ================
'La méthode GetSubmitForm1 génère le script requis pour la navigation par pagination
'
'================================================== = ===============
sous public GetSubmitForm1()
'Fonction Javascript de navigation dans les pages
Réponse.Écrire " "+vrcrlf
Réponse.Write ("<langage de script=""javascript"">") +vbcrlf
Response.Write "fonction generalSubmit(i)"+vbcrlf
Réponse.Écrire " {"+vbcrlf
Response.Write " document."&SubmitForm&".flag.value=""query1111111155555"";"+vbcrlf
Response.Write " document."&SubmitForm&".currentpage.value=i;"+vbcrlf
Response.Write " "&SubmitForm&".submit();"+vbcrlf
Réponse.Écrivez " }"+vbcrlf
'fonction javascript pour changer la taille de la page
Response.Write "fonction changePageSize(ii)"+vbcrlf
Réponse.Écrire " {"+vbcrlf
Response.Write " document."&SubmitForm&".flag.value=""query1111111155555"";"+vbcrlf
Response.Write " document."&SubmitForm&".currentpage.value=1;"+vbcrlf
Response.Write " document."&SubmitForm&".pagesize.value=ii;"+vbcrlf
Response.Write " "&SubmitForm&".submit();"+vbcrlf
Response.Write " }"+vbcrlf
Réponse.Write ("</Script>")+vbcrlf
Réponse.Écrire " "+vrcrlf
fin du sous
'================================================ = ===================
'propriété totalRecordCount
'À propos du nombre total d'enregistrements
'
'================================================== = =================
Propriété publique Laissez totalRecordCount(int_totalRecordCount)
Si IsNumeric(int_totalRecordCount) Alors
int_totalRecord=CLng(int_totalRecordCount)
Fin si
Propriété de fin
Propriété publique Obtenir totalRecordCount
Si non(int_totalRecord="" ou (not(IsNumeric(int_totalRecord)))) Alors
totalRecordCount=int_totalRecord
Fin si
Propriété de fin
'================================================== = =================
'Méthode GetRecordCount
'Renvoie le nombre actuel d'enregistrements
'
'================================================== = =================
fonction publique GetRecordCount()
GetRecordCount=int_totalRecord
fonction de fin
'================================================== = =================
'Class_Initialize initialisation de la classe
'Initialiser la valeur de la page actuelle
'
'================================================== = =================
Sous-classe privée_Initialize
'=========================
'Définir les valeurs par défaut pour certains paramètres
'=========================
' XD_PageSize=10 'Définissez la valeur par défaut de la pagination sur 10
'=========================
'Obtenir la valeur actuelle
'=========================
Si Request("currentpage")="" Alors
int_curpage=1
ElseIf not(IsNumeric(Request("currentpage"))) Then
int_curpage=1
ElseIf CInt(Trim(Request("currentpage")))<1 Then
int_curpage=1
Autre
Int_curpage=CInt(Trim(Request("currentpage")))
Fin si
fin sous
'============================================== =
'ShowPage crée une barre de navigation de pagination
"Il y a la page d'accueil, la page précédente, la page suivante, la dernière page et la navigation numérique
'
'===============================================
Sous-ShowPage publique()
Dim str_tmp
XD_sURL = GetUrl()
' int_totalRecord=XD_Rs.RecordCount
Si int_totalRecord<=0 Alors
str_error=str_error & "Le nombre total d'enregistrements est nul, veuillez saisir les données"
Appelez ShowError()
Fin si
Si int_totalRecord="" alors
int_TotalPage=1
Sinon
'modifier par wls 041215 Pour l'affichage des bonnes pages--------------
Si int_totalRecord mod PageSize =0 Alors
int_TotalPage = CLng(int_TotalRecord XD_PageSize * -1) *-1
Autre
int_TotalPage = CLng(int_TotalRecord XD_PageSize * -1)*-1+1
Fin si
Fin si
Si Int_curpage>int_Totalpage Alors
int_curpage=int_TotalPage
Fin Si
'=============================================== = ========
'Afficher les informations de pagination, chaque module change la position d'affichage en fonction de ses propres exigences
'================================================== = =======
'réponse.écrire " "
str_tmp=AfficherPremierPrv
réponse.write str_tmp
str_tmp=showNumBtn
réponse.write str_tmp
str_tmp=AfficherNextLast
réponse.write str_tmp
str_tmp=Afficher les informations sur la page
réponse.write str_tmp
Réponse.écrire " "
AfficherAller
à la fin du sous-marin
'===============================================
'ShowFirstPrv affiche la page d'accueil et la page précédente
'
'
'===============================================
Fonction privée ShowFirstPrv()
Dim Str_tmp,int_prvpage
Si int_curpage=1 Alors
str_tmp=Btn_First&" "&Btn_Prev
Sinon, si int_curpage=0 alors
str_tmp=Btn_First&" "&Btn_Prev
autre
int_prvpage=int_curpage-1
str_tmp="<a href=""#"" onclick=""javascript:generalSubmit('1')"" alt=""Première page"">" & Btn_First&"</a> <a href="" # "" onclick=""javascript:generalSubmit('"&int_prvpage&"')"" alt=""Page précédente"">" & Btn_Prev&"</a>"
Fin si
ShowFirstPrv=str_tmp
Fin de la fonction
'===============================================
'AfficherSuivantDernière page suivante, dernière page
'
'
'===============================================
Fonction privée ShowNextLast()
Dim str_tmp,int_Nextpage
Si Int_curpage>=int_totalpage Alors
str_tmp=Btn_Suivant & " " & Btn_Last
Autre
Int_NextPage=int_curpage+1
str_tmp="<a href=""#"" onclick=""javascript:generalSubmit('"&int_nextpage&"')"" alt=""Nextpage"">" & Btn_Next&"</a> <a href= "" #"" onclick=""javascript:generalSubmit('"&int_totalpage&"')"" alt=""Dernière page"">" & Btn_Last&"</a>"
Fin si
ShowNextLast=str_tmp
Fonction de fin
'Fonction de fin
'===============================================
'ShowNumBtn navigation numérique modifiée
'
'===============================================
Fonction showNumBtn()
Dim i,str_tmp,end_page,start_page
start_page=1
'ajouter par sll 2005.05.20 int_curpage=0
si int_curpage=0 alors
str_tmp=str_tmp&"0"
autre
si int_curpage>1 alors
start_page=int_curpage
si (int_curpage<=5) alors
page_début=1
finir si
si (int_curpage>5) alors
start_page=int_curpage-2
finir si
finir si
end_page=start_page+5
si end_page>int_totalpage alors
end_page=int_totalpage
finir si
Pour i=start_page à end_page
strTemp=XD_sURL & CStr(i)
str_tmp=str_tmp & "[<a href=""#"" onclick=""javascript:generalSubmit('"&i&"')"">"&i&"</a>] "
Suivant
finir si
showNumBtn=str_tmp
Fin de la fonction
'===============================================
'AfficherAller à la page
'La page saute automatiquement
'ajouter d'ici le 20/05/2005
'===============================================
Fonction privée ShowGoto()
'response.write int_totalPage
diminti
si int_totalPage<=0 alors
réponse.write "<select name='goto' désactivé>"
Réponse.Écrivez "<option value='0'>0</option>"
réponse.écrire "</select>"
else
réponse.write "<select name='goto' onchange='javascript:generalSubmit(this.value)'>"
pour inti=1 à int_totalPage
Response.Write "<option value='"&inti&"'"
si cstr(inti)=cstr(int_curpage) alors
réponse.write "sélectionné"
finir si
réponse.write" >"&inti&"</option>"
suivant
réponse.écrire "</select>"
finir si
Fonction de fin
'===============================================
'ShowPageInfo informations de pagination
'Modifier si nécessaire
'
'===============================================
Fonction privée ShowPageInfo()
Dim str_tmp
str_tmp=" [Page :<font color=red>"&int_curpage&"</font>/"&int_totalpage&"] [Total "&int_totalrecord&" éléments] ["&XD_PageSize&" éléments/page]"
ShowPageInfo=str_tmp
Fonction de fin
'===============================================
'ShowPageSizeChange modifie la taille de la page
'Modifier si nécessaire
'
'===============================================
public sous ShowPageSizeChange()
Dim str_tmp
str_tmp="Taille de la page : <select name='sssssPageSize' onchange='changePageSize(this.value)'>"
str_tmp=str_tmp & "<option"
si XD_PageSize=10 alors str_tmp =str_tmp & " sélectionné "
str_tmp=str_tmp & " value='10'>10</option>"
str_tmp=str_tmp & "<option"
si XD_PageSize=20 alors str_tmp =str_tmp & " sélectionné "
str_tmp=str_tmp & " value='20'>20</option>"
str_tmp=str_tmp & "<option"
si XD_PageSize=50 alors str_tmp =str_tmp & " sélectionné "
str_tmp=str_tmp & " value='50'>50</option>"
str_tmp=str_tmp & "<option"
si XD_PageSize=int_totalRecord alors str_tmp =str_tmp & " sélectionné "
str_tmp=str_tmp & " value='" & int_totalRecord & "'>tout</option>"
str_tmp=str_tmp & "</select>"
réponse.Écrivez str_tmp
Fin du sous
'===============================================
'Fonction modifiée pour obtenir les paramètres d'URL actuels
'Codage par Redsun
'Commentaire de Northsnow : je ne sais pas où l'utiliser, mais garde-le
'===============================================
Fonction privée GetUrl()
Dim ScriptAddress, M_ItemUrl, M_item
ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME"))&"?" 'Obtenir l'adresse actuelle
Si (Request.QueryString <> "") Alors
M_ItemUrl = ""
Pour chaque M_item dans Request.QueryString
Si InStr("page",M_Item)=0 Alors
M_ItemUrl = M_ItemUrl & M_Item &"="& Server.URLEncode(Request.QueryString(""&M_Item&"")) & "&"
Fin si
Suivant
ScriptAddress = ScriptAddress & M_ItemUrl 'Obtenir l'adresse avec les paramètres
Fin si
GetUrl = ScriptAddress '& "page="
Fonction de fin
'===============================================
'Définissez l'événement Terminate.
'===============================================
Sous-classe privée_Terminate
'XD_RS.fermer
'Définir XD_RS=rien
Fin du sous-marin
'===============================================
'Message d'erreur ShowError
'===============================================
Sous-ShowError privé()
Si str_Error <> "" Alors
Réponse.Write("" & SW_Error & "")
Réponse.Fin
Fin si
End Sub
End classe
%>