时间:2021-05-25
从开始学习到使用ASP到现在也写了不少程序了,最令人头痛的是写数据分页,每次都是由于几个变量名或几个参数的不同,因而需要每次都写哪一段冗长而又繁杂的分页代码,代码长了使得程序的可读性变差,容易出差,调试半天也找不出错在哪里,所以慢慢的我开始使用一些网上的提供的分页函数或分页类。的确省事不少,但是通常的函数和类的做法都是就数据显示部分也封装了起来,每次为了达到自己需要的显求效果要去改动函数或者类的本身,所以使用起来也不是怎么方便,自己写的分页改起来已经够复杂了,更不要说别人的了。
所以趁昨天有空自己写了一个分页的类,自我感觉良好(不要用鸡蛋砸我),在这里和大家分享一下自己的经验(谈不上经验,感想吧)。在这里我也不想说分页的原理了,反正大家都懂,要我往深入的谈我也不会。呵呵。
一、创建分页类的目标
在写之前,我曾想过,我究竟要写怎么样一个类,回想起以前写分页过程的时候,最烦的莫过于每次都要写哪一段复杂的分页代码,最大的烦恼每次都是仅仅几个变量名的不同。所以第一个要实现的就是要把这个封装起来,第二个就是要把分页的导航条也封装起来,第三个,不习惯哪些把数据显示部分也封装起来的方法,这不是方便编程,对与哪些对显示效果每次都不同的用户来说,比自己写分页还要麻烦。所以我的目地就是对RecordSet进行一些简单的封装。
二、创建过程
所以我写的第一个属性,就是返一个经过处理的RecordSe
到这里类的功能才算完整(为了节省版面,我有些方法没有放上去,再下面附上全部完整代码)写一个简单页面测试一下
<%效果还不错,该有的全有了。
分页过程中,还有一个比软麻烦的问题是,在带多个参数的URL中,如保证在页面转向的时候不掉失其它参数。我靠一个GetURL的过程来实现,并在生成导航时调用。
PrivateFunctionGetURL()通过GetURL的处理,可以自动的获取当前面的文件名,和所有带的参数,实现了页面转换页不丢失参数。
三、后记
通过这个分页类,解决了每次分页时需要重复写的分页部分代码,方便了编程,也使的提高了主要代码的可读性。也希望能给大家在编程过程中带来一点方便,由于本人水平有限,程序和文章中难免有错,还望大家批评指正。
全部代码下载
附全部代码:
<%'==================================================================='XDOWNPAGE ASP版本'版本 1.00'Code by zykj2000'Email: zykj_2000@163.net'BBS: http://bbs.513soft.net'本程序可以免费使用、修改,希望我的程序能为您的工作带来方便'但请保留以上请息''程序特点'本程序主要是对数据分页的部分进行了封装,而数据显示部份完全由用户自定义,'支持URL多个参数''使用说明'程序参数说明'PapgeSize 定义分页每一页的记录数'GetRS 返回经过分页的Recordset此属性只读'GetConn 得到数据库连接'GetSQL 得到查询语句'程序方法说明'ShowPage 显示分页导航条,唯一的公用方法''===================================================================Const Btn_First="<font face=""webdings"">9</font>" '定义第一页按钮显示样式Const Btn_Prev="<font face=""webdings"">3</font>" '定义前一页按钮显示样式Const Btn_Next="<font face=""webdings"">4</font>" '定义下一页按钮显示样式Const Btn_Last="<font face=""webdings"">:</font>" '定义最后一页按钮显示样式Const XD_Align="Center" '定义分页信息对齐方式Const XD_Width="100%" '定义分页信息框大小Class XdownpagePrivate XD_PageCount,XD_Conn,XD_Rs,XD_SQL,XD_PageSize,Str_errors,int_curpage,str_URL,int_totalPage,int_totalRecord,XD_sURL'================================================================='PageSize 属性'设置每一页的分页大小'=================================================================Public Property Let PageSize(int_PageSize)If IsNumeric(Int_Pagesize) ThenXD_PageSize=CLng(int_PageSize)Elsestr_error=str_error & "PageSize的参数不正确"ShowError()End IfEnd PropertyPublic Property Get PageSizeIf XD_PageSize="" or (not(IsNumeric(XD_PageSize))) ThenPageSize=10ElsePageSize=XD_PageSizeEnd IfEnd Property'================================================================='GetRS 属性'返回分页后的记录集'=================================================================Public Property Get GetRs()Set XD_Rs=Server.createobject("adodb.recordset")XD_Rs.PageSize=PageSizeXD_Rs.Open XD_SQL,XD_Conn,1,1If not(XD_Rs.eof and XD_RS.BOF) ThenIf int_curpage>XD_RS.PageCount Thenint_curpage=XD_RS.PageCountEnd IfXD_Rs.AbsolutePage=int_curpageEnd IfSet GetRs=XD_RSEnd Property'================================================================'GetConn 得到数据库连接''================================================================Public Property Let GetConn(obj_Conn)Set XD_Conn=obj_ConnEnd Property'================================================================'GetSQL 得到查询语句''================================================================Public Property Let GetSQL(str_sql)XD_SQL=str_sqlEnd Property'=================================================================='Class_Initialize 类的初始化'初始化当前页的值''==================================================================Private Sub Class_Initialize'========================'设定一些参数的黙认值'========================XD_PageSize=10 '设定分页的默认值为10'========================'获取当前面的值'========================If request("page")="" Thenint_curpage=1ElseIf not(IsNumeric(request("page"))) Thenint_curpage=1ElseIf CInt(Trim(request("page")))<1 Thenint_curpage=1ElseInt_curpage=CInt(Trim(request("page")))End IfEnd Sub'===================================================================='ShowPage 创建分页导航条'有首页、前一页、下一页、末页、还有数字导航''====================================================================Public Sub ShowPage()Dim str_tmpXD_sURL = GetUrl()int_totalRecord=XD_RS.RecordCountIf int_totalRecord<=0 Thenstr_error=str_error & "总记录数为零,请输入数据"Call ShowError()End IfIf int_totalRecord="" thenint_TotalPage=1ElseIf int_totalRecord mod PageSize =0 Thenint_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1Elseint_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1+1End IfEnd IfIf Int_curpage>int_Totalpage Thenint_curpage=int_TotalPageEnd If'=================================================================='显示分页信息,各个模块根据自己要求更改显求位置'==================================================================response.write ""str_tmp=ShowFirstPrvresponse.write str_tmpstr_tmp=showNumBtnresponse.write str_tmpstr_tmp=ShowNextLastresponse.write str_tmpstr_tmp=ShowPageInforesponse.write str_tmpresponse.write ""End Sub'===================================================================='ShowFirstPrv 显示首页、前一页'''====================================================================Private Function ShowFirstPrv()Dim Str_tmp,int_prvpageIf int_curpage=1 Thenstr_tmp=Btn_First&" "&Btn_PrevElseint_prvpage=int_curpage-1str_tmp="<a href="""&XD_sURL & "1" & """>" & Btn_First&"</a> <a href=""" & XD_sURL & CStr(int_prvpage) & """>" & Btn_Prev&"</a>"End IfShowFirstPrv=str_tmpEnd Function'===================================================================='ShowNextLast 下一页、末页'''====================================================================Private Function ShowNextLast()Dim str_tmp,int_NextpageIf Int_curpage>=int_totalpage Thenstr_tmp=Btn_Next & " " & Btn_LastElseInt_NextPage=int_curpage+1str_tmp="<a href=""" & XD_sURL & CStr(int_nextpage) & """>" & Btn_Next&"</a> <a href="""& XD_sURL & CStr(int_totalpage) & """>" & Btn_Last&"</a>"End IfShowNextLast=str_tmpEnd Function'===================================================================='ShowNumBtn 数字导航'''====================================================================Private Function showNumBtn()Dim i,str_tmpFor i=1 to int_totalpagestr_tmp=str_tmp & "[<a href=""" & XD_sURL & CStr(i) & """>"&i&"</a>] "NextshowNumBtn=str_tmpEnd Function'===================================================================='ShowPageInfo 分页信息'更据要求自行修改''====================================================================Private Function ShowPageInfo()Dim str_tmpstr_tmp="页次:"&int_curpage&"/"&int_totalpage&"页 共"&int_totalrecord&"条记录 "&XD_PageSize&"条/每页"ShowPageInfo=str_tmpEnd Function'=================================================================='GetURL 得到当前的URL'更据URL参数不同,获取不同的结果''==================================================================Private Function GetURL()Dim strurl,str_url,i,j,search_str,result_urlsearch_str="page="strurl=Request.ServerVariables("URL")Strurl=split(strurl,"/")i=UBound(strurl,1)str_url=strurl(i)'得到当前页文件名str_params=Trim(Request.ServerVariables("QUERY_STRING"))If str_params="" Thenresult_url=str_url & "?page="ElseIf InstrRev(str_params,search_str)=0 Thenresult_url=str_url & "?" & str_params &"&page="Elsej=InstrRev(str_params,search_str)-2If j=-1 Thenresult_url=str_url & "?page="Elsestr_params=Left(str_params,j)result_url=str_url & "?" & str_params &"&page="End IfEnd IfEnd IfGetURL=result_urlEnd Function'====================================================================' 设置 Terminate 事件。''====================================================================Private Sub Class_TerminateXD_RS.closeSet XD_RS=nothingEnd Sub'===================================================================='ShowError 错误提示'''====================================================================Private Sub ShowError()If str_Error <> "" ThenResponse.Write("" & str_Error & "")Response.EndEnd IfEnd SubEnd classset conn = server.CreateObject("adodb.connection")conn.open "driver={microsoft access driver (*.mdb)};dbq=" & server.Mappath("pages.mdb")'#############类调用样例#################'创建对象Set mypage=new xdownpage'得到数据库连接mypage.getconn=conn'sql语句mypage.getsql="select * from [test] order by id asc"'设置每一页的记录条数据为5条mypage.pagesize=5'返回Recordsetset rs=mypage.getrs()'显示分页信息,这个方法可以,在set rs=mypage.getrs()以后,可在任意位置调用,可以调用多次mypage.showpage()'显示数据Response.Write("<br/>")for i=1 to mypage.pagesize'这里就可以自定义显示方式了if not rs.eof thenresponse.write rs(0) & "<br/>"rs.movenextelseexit forend ifnext%>
[Ctrl+A 全部选择 然后拷贝]
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.主题,Asp.net环境下,通用的数据分页(包括Oracle,SqlServer,DB2...)很久以前,就想做一个通用点的数据分页组件,但苦于一直没有充足
一个可查询所有表的“通用”查询分页类最近突发奇想,希望写出一个可以针对所有表的查询分页类。因为在实际的开发中,恐怕查询并将结果集分页显示是用得最多的代码,而表的
ASP经典分页类出处'=====================================================================
asp分页的一个类在50,000条记录下测试过,速度比ado的那个要快多了
写一个通用的分页框架,这样在项目里面如果想实现分页功能,只需要稍加改动参数就可以实现分页处理了。这样写了会节省很多时间。一.分页类既然要分页那么我们就要考虑建一