在论坛上有不少的关于asp分页的文章,基本思想是一致的,我把这些网友的思路深化了一下,用javascript套上了一层基于对象的外衣,这样调用起来就不显得乱了,其它的话就不多说了,详见程序中的注释。
下边是源程序:
<script language=javascript runat=server>
function trim(str)//去掉字符串的首尾空格
{ var tmpstr=new string(str)
return tmpstr.replace(/(^\s*)|(\s*$)/g, "");
}
</script>
<script language=javascript runat=server>
// ************************************************************************
// script compont object model
// design for active server pages
//
// copyright 2003 version 1.0
// made by yinshuguang
// all rights reserved.
// ************************************************************************
function jpagenavbar(){
_lb__prototype();
}
function _lb__prototype()
{
// public members
jpagenavbar.prototype.pagesize="0"
jpagenavbar.prototype.recordcount="0" //总记录数
jpagenavbar.prototype.pagecount="1" //总页数
jpagenavbar.prototype.currentpage="1"
jpagenavbar.prototype.pnwidth="100%"
jpagenavbar.prototype.pnalign="right"
jpagenavbar.prototype.plwidth="100%" //表格宽度
jpagenavbar.prototype.plalign="right" // 表格的对齐方式
// private members
//public methods
jpagenavbar.prototype.getcurrentpage=_getcurrentpage
jpagenavbar.prototype.pndisplay = _pn_show;
jpagenavbar.prototype.pldisplay = _pl_show;
//private methods
//scope implementation in _lb__prototype function
function _getcurrentpage(){
var pageno=new string() //当前显示的是第几页
//取得当前页
pageno = request.querystring ("pageno")
pageno=ftrim(pageno)
//如果没有选择第几页,则默认显示第一页;
if (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>
在调用这个对象之时,注意保存sql语句的查询条件下面我的解决方法:
<@language=javascript>
var tj=trim(request.form("tj"))
//或 var tj=trim(request.querystring("tj"))
if (tj==""){
//表明不是从查询页传过来的条件,而是从分页导向过来
tj=trim(session("tj"))
}
else{ //注意保存条件
session("tj")=tj
}
这仅是一个基本的解决思路,遇到实际情况您可要具体问题具体分析
下边是对象的调用过程
//ado.recordset记录分页对象
//设置分页
var rowcount =3
var fy=new jpagenavbar() //创建对象
if (!rsrpt.eof){
rsrpt.pagesize = rowcount //设置数据集的页记录
fy.pagesize=rowcount
rsrpt.absolutepage =fy.getcurrentpage()
fy.recordcount=rsrpt.recordcount
fy.pagecount=rsrpt.pagecount
}
//显示分页
<%fy.pndisplay() //这是一个具有上一页,下一页方式的导航%>
<%fy.pldisplay() // 这是一个具有页码列表的导航%>
