基于组件的asp编程之二--分页对象
在asp中,分页使用的最多的程序段了,把分页写成函数,调用起来,要传很多参数,写成对象,可以使分页
对象调用简单,本文在参考众多网友的分页函数基础上,用javascript把它写成了一个对像放于文件
夹"_ScriptCom"下,文件名为"JPageNavbar.asp",先看一下分页对象的调用方式(由于大多数的asp开发人员使
用vbscript,所以本文的实例采用vbscript编写): <%@LANGUAGE="VBSCRIPT" %> <!--#include file="../connections/dbconn.asp" --> <!--#include file="../_ScriptCom/FAdodb.asp" --> <!--#include file="../_ScriptCom/FSession.asp" --> <!--#include file="../_ScriptCom/JPageNavbar.asp" --> <% Response.Buffer=true on error resume next if trim(Request.ServerVariables("REQUEST_METHOD")) = "POST" then '取得查询字符串 chxstr=readForm("chxstr") xshstr=readForm("xshstr") r1=readForm("R1") '保存查询条件 session("r1")=r1 session("chxstr")=chxstr session("xshstr")=xshstr else 如果不是从form提交,则是分页,从session取的查询条件 r1=readSession("r1") chxstr=readSession("chxstr") xshstr =readSession("xshstr") end if '这里是一些关于业务的逻辑运算 if xshstr=empty then xshstr ="查询所有记录" end if select case r1 case 1 '在校学生 sql=" select * from v_student_base where graduate=0" if chxstr<>empty then sql=sql+" and "+ chxstr end if cddr="在校学生" case 2 ' 毕业学生 sql=" select * from v_student_base where graduate=1" if chxstr<>empty then sql=sql+" and "+ chxstr end if cddr="毕业学生" case 0 '全部学生 if chxstr<>empty then sql="select * from v_student_base where"+" "+chxstr else sql="select * from v_student_base" end if cddr="全部学生" case else response.write "系统参数错误,请与系统管理员联系!" response.End end select '生成connection 和 Recordset set conn=connCreate(getDBLink()) set rs=rsCreate() rs.open sql,conn,1,3 if (rs.eof ) then show_msg "很遗憾,没有您要的记录!",4,"infoQuery.asp" end if dim gd(1) gd(0)="未毕业" gd(1)="已毕业" '*************************************************************************** '注意:这里是分页 RowCount =15 set fy=createJPageNavbar() if (not isEmpty(rs)) then rs.PageSize = RowCount '设置数据集的页记录 fy.PageSize=RowCount rs.AbsolutePage =fy.getCurrentPage() fy.RecordCount=rs.RecordCount fy.PageCount=rs.pageCount fy.PnWidth="100%" fy.PnAlign="center" fy.PlWidth="100%" '表格宽度 fy.PlAlign="right" ' 表格的对齐方式 end if '*********************************************************************************** %> <HTML> <HEAD> <TITLE>学生信息查询</TITLE> <link href="../css/style.css" rel="stylesheet" type="text/css"> </HEAD> <BODY text="#000000" bgColor="#ffffff" leftMargin="0" topMargin="0"> <br> <TABLE width="550" border="1" cellspacing="0" cellpadding="1" align="center" class="t_table"
ID="Table1"> <TR> <TD colspan="2" class="t_head"> :::学生信息搜索结果::: </TD> </TR> <TR> <TD width="80%" align="left"><B>==>>查询条件:</B> <%=xshstr %></TD> <TD width="20%" align="right"><INPUT type="button" value="返回" class="button"
onclick="gofind()" ID="Button1" NAME="Button1"> </TD> </TR> <TR> <TD colspan="2"><table width="100%" border="0" cellpadding="1" cellspacing="0"
class="t_table" ID="Table2"> <tr align="center"> <td colspan="7"><% '*************************************************** fy.pnDisplay() '分页的“上一页” “下一页” '*********************************************************** %></td> </tr> <tr> <td width="13%" class="t_head">学号</td> <td width="11%" class="t_head">姓名</td> <td width="8%" class="t_head">性别</td> <td width="10%" class="t_head">年级</td> <td width="20%" class="t_head">专业</td> <td width="28%" class="t_head">二级学院</td> <td width="10%" class="t_head">状态</td> </tr> <% i=0 '******************************************************** while (not rs.eof and i<RowCount) '控制一页显示的记录条数 '********************************************************* %> <tr> <td width="13%" align="center"><a href="#" onclick="openWindow2('stu_msg.asp?
stu_num=<%= rs("stu_num")%>')"><%= rs("stu_num") %></a></td> <td width="11%" align="center"><%= rs("name") %></td> <td width="8%" align="center"><%= rs("sex") %></td> <td width="10%" align="center"><%= rs("gread") %></td> <td width="20%" align="center"><%= rs("speciality_name") %></td> <td width="28%" align="center"><%= rs("secondary") %></td> <td width="10%" align="center"><%=gd(rs("graduate")) %></td> </tr> <% i=i+1 rs.moveNext wend %> <tr align="right"> <td colspan="7"><% '************************************************************** fy.plDisplay() '分页列表 '************************************************************** %></td> </tr> </table> </TD> </TR> </TABLE> </BODY> </HTML> <% rsNull(rs) connNull(conn) %>
这里是分页显示的效果图(做了一下处理)

这里是源代码
<SCRIPT LANGUAGE=javascript RUNAT=Server> // ************************************************************************ // Script Compont Object Model // Design for Active Server Pages // // Copyright 2003 Version 1.0 // Made by newsunet // 请不要删除这一段注释,自由传播,保留所有权 // ************************************************************************
/*//Ado.RecordSet记录分页对象 //设置分页 var RowCount =3 var fy=new JPageNavbar() if (!rsRpt.Eof){ rs.PageSize = RowCount //设置数据集的页记录 fy.PageSize=RowCount rs.AbsolutePage =fy.getCurrentPage() fy.RecordCount=rs.RecordCount fy.PageCount=rs.pageCount fy.PnWidth="100%" fy.PnAlign="right" fy.PlWidth="100%" //表格宽度 fy.PlAlign="right" // 表格的对齐方式
} //显示分页 <%fy.pnDisplay()%> <%fy.plDisplay()%>
*/ function createJPageNavbar(){
//这个函数是vbscript的接口函数 ,vbscript不是基于对象的脚本语言 var objJPageNavbar=new JPageNavbar return objJPageNavbar } function JPageNavbar(){ // public members this.PageSize="0" this.RecordCount="0" //总记录数 this.PageCount="1" //总页数 this.CurrentPage="1" this.PnWidth="100%" this.PnAlign="right" this.PlWidth="100%" //表格宽度 this.PlAlign="right" // 表格的对齐方式
// private members //public methods this.getCurrentPage=_getCurrentPage this.pnDisplay = _PN_show; this.plDisplay = _PL_show; //private methods } function _getCurrentPage(){ //当前显示的是第几页 //取得当前页 var pageNo = Request.QueryString ("PageNo") //如果没有选择第几页,则默认显示第一页; if (isNaN(pageNo)) { pageNo = 1 } this.CurrentPage=pageNo return pageNo } function _PL_show(){ var strBuilder=new String() strBuilder="" var p=(this.CurrentPage-(this.CurrentPage%10))/10 //计算分页显示的页数 //首组为第0族 strBuilder+="<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" " strBuilder+=" width=\""+this.PlWidth+"\" align=\""+this.PlAlign+"\">" strBuilder+=" <tr> " strBuilder+=" <td valign=\"middle\" align=\"right\">分页:" if (this.CurrentPage==1){ strBuilder+="<font face=\"webdings\" color=\"#ff0000\">9</font> " } else{ strBuilder+="<a href=\"?PageNo=1\" title=\"首页\"><font face=\"webdings\">9</font></a> " } //上十页 if (p*10>0){ strBuilder+="<a href=\"?PageNo="+(p*10)+"\" title=上十页><font
face=\"webdings\">7</font></a> " } strBuilder+="<b>" //分页列表 for(var i=p*10+1;i<=p*10+10;i++){ if (i==this.CurrentPage){ strBuilder+="<font color=\"#000000\">"+i+"</font> " } else{ strBuilder+="<a href=?PageNo="+i+" title=\"转到: 第"+i+"页\">"+i+"</a> " } if (i>=this.PageCount) break; } strBuilder+= "</b>" //显示下十页 if (i<this.PageCount){ strBuilder+="<a href=\"?PageNo="+i+"\" title=\"下十页\"><font
face=\"webdings\">8</font></a> " } //显示尾页 if (this.CurrentPage==this.PageCount){ strBuilder+= "<font face=\"webdings\" color=\"#000000\">:</font> " } else{ strBuilder+= "<a href=?PageNo="+this.PageCount+" title=\"尾页\"><font
face=\"webdings\">:</font></a> " } strBuilder+= "</td></tr></table>" Response.Write(strBuilder) } function _PN_show(){ var strBuilder=new String() var nextPageNo strBuilder="" strBuilder+="<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" " strBuilder+=" width=\""+this.PnWidth+"\" align=\""+this.PnAlign+"\">" strBuilder+="<tr>" strBuilder+="<td valign=\"middle\">页次:
[<b>"+this.CurrentPage+"</b>/<b>"+this.PageCount+"</b>]页 每页[<b>"+this.PageSize+"</b>]条 总记录
数:[<b>"+this.RecordCount+"</b>]条</td>" strBuilder+="<td align=\"right\">" if (this.CurrentPage>1){ nextPageNo=this.CurrentPage nextPageNo-- strBuilder+="[<a href=?pageNo="+nextPageNo+" title=\"转到上一页\">上一页</a>]" } if (this.CurrentPage<this.PageCount){ nextPageNo=this.CurrentPage nextPageNo++ strBuilder+="[<a href=?pageNo="+nextPageNo+" title=\"转到下一页\">下一页</a>]" } strBuilder+="</td></tr></table>" Response.Write(strBuilder) }
</SCRIPT>
本文原名:asp分页的基于对象的解决

|