超酷的通用分页显示控制 (一) 基本原型
发表于:2007-06-30来源:作者:点击数:
标签:
这个分页代码使用很简单,只有4个步骤: (1)构造 SQL 查询语句、设置 数据库 连接字符串、设置每页记录显示数目 (2)插入分页控制代码 navigator_init.inc 文件 (3)在页面的适当地方(即你想显示“上页、下页”的地方),插入分页导航代码 navigator.inc
这个分页代码使用很简单,只有4个步骤:
(1)构造 SQL 查询语句、设置
数据库连接字符串、设置每页记录显示数目
(2)插入分页控制代码 navigator_init.inc 文件
(3)在页面的适当地方(即你想显示“上页、下页”的地方),插入分页导航代码 navigator.inc
(4)用循环显示本页记录
假定我们的网站目录结构如下:
asp/ ‘’ ASP 文件路径
images/ ‘’ 图形文件路径
inc/ ‘’ 包含文件路径
content/ ‘’ 存放诸如 header.inc、footer.inc 等每个页面都需要包含的文件
control/ ‘’ 存放诸如 navigator.inc、query.inc 等于分页控制有关的文件
额外的建议:
请将本页面的内容复制到 EditPlus 2.1 中,然后阅读(以后的文章均照此处理),您将会觉得阅读起来非常轻松,因为它的颜色配置非常舒服。当然我强烈推荐您也用 EditPlus 2.1 来编辑 .htm、.asp 、.inc 文件。
<一> 需要分页的 ASP 文件
sample.asp
<%
‘’ 取得当前 ASP 页面的完整路径,重要技巧
theScript = Request.ServerVariables("SCRIPT_NAME")
myconnstr = "driver={
SQL Server};server=yourserver;uid=sa;pwd=;database=mytest"
thePageSize = 20 ‘’ 每页显示的记录数
‘’ (1)构造 SQL 语句
uSQL = "select * from yourtablename "
‘’ (2)插入分页控制代码
%>
<!--#include file="../inc/control/navigator_init.inc"-->
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="../default.css" type="text/css">
</head>
<!-- 你的 HTML 代码//-->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<
td>
<!--(3)插入分页导航代码-->
<!--#include file="../inc/control/navigator.inc"-->
</td>
</tr>
</table>
<!-- 你的 HTML 代码//-->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<!--(4)用循环显示本页记录-->
<% For i = 1 To rs.pagesize %>
<!-- 你的记录显示代码//-->
<%
rs.MoveNext
If rs.EOF Then
Exit For
rs.close
conn.close
End If
next
%>
</td>
</tr>
</table>
<!-- 你的 HTML 代码//-->
</body>
</html>
<二> 分页控制代码:
navigator_init.inc
<%
theCurrentPageNum = clng(request("pn"))
‘’ 用页面名字来唯一确定当前页面使用的 rs
‘’ 由于不同目录下面可以有相同名字的文件,因此使用带完整路径的文件名
theCurrentRS = "rs" & theScript
If theCurrentPageNum = 0 Then
Set conn = Server.CreateObject("ADODB.Connection")
conn.open myconnstr
set rs = server.createobject("adodb.recordset")
rs.open uSQL,conn,1,3
if rs.recordcount > 0 then
rs.PageSize = thePageSize
rs.AbsolutePage = 1
theCurrentPageNum = 1
Set Session(theCurrentRS) = rs
end if
else
Set rs = Session(theCurrentRS)
if rs.recordcount > 0 then
rs.AbsolutePage = theCurrentPageNum
end if
End If
‘’构造导航条
href_first = theScript & "?mo=0&pn=1"
href_prev = theScript & "?mo=0&pn=" & (theCurrentPageNum-1)
href_next = theScript & "?mo=0&pn=" & (theCurrentPageNum+1)
href_last = theScript & "?mo=0&pn=" & rs.pagecount
strnav_first= "<a href=" & href_first & ">首页</a>"
strnav_prev = "<a href=" & href_prev & ">前页</a>"
strnav_next = "<a href=" & href_next & ">后页</a>"
strnav_last = "<a href=" & href_last & ">末页</a>"
if rs.pagecount > 1 then
‘’在首页
if theCurrentPageNum = 1 then
strnav_first= "首页"
strnav_prev = "前页"
end if
‘’在末页
if theCurrentPageNum = rs.pagecount then
strnav_next = "后页"
strnav_last = "末页"
end if
else
strnav_first= "首页"
strnav_prev = "前页"
strnav_next = "后页"
strnav_last = "末页"
end if
strnav = strnav_first & " " & strnav_prev & " " & strnav_next & " " & strnav_last
‘’ 由于在 listrecords 函数中,当显示完所有记录时将关闭 rs ,因此先把 rs.recordcount 保存起来
theRsCount = rs.recordcount
%>
<三> 分页导航代码:
navigator.inc
注意 form 表单一定要有自己的名字,例如 form_nav ,以和其他表单区分
<table width="300" border="0" align="right" cellpadding="0" cellspacing="0" height="30">
<form action="<%=theScript%>" method="post" name="form_nav" onsubmit="
javascript:return checkpn(this);">
<tr>
<td align="right">
<%=rs.recordcount%> 条 <%=rs.pagecount%>页 第<input type="text" name="pn" value="<%=theCurrentPageNum%>" size=2 maxlength=4 class="form_text_underline">页 <%= strnav %>
</td>
</tr>
</form>
</table>
<script language="javascript">
// 判断用户输入的页码是否合法
function checkpn(form)
{
pn = form.pn ;
if (pn.value=="")
{ alert("请输入页码") ;pn.select();return false;}
if (!uisNum(pn.value))
{ alert("页码是数字") ;pn.select();return false;}
if (pn.value-<%=rs.pagecount%>>0)
{ alert("页码不能大于<%=rs.pagecount%>") ;pn.select();return false;}
return true;
}
function aLength(str)
{
var i,len;
len=0;
for(i=0;i<str.length;i++)
{
if(str.charCodeAt(i) > 255)
len++;
len++;
}
return len;
}
function trimString(str)
{
var i,j;
if(str == "") return "";
for(i=0;i<str.length;i++)
if(str.charAt(i) != ‘’ ‘’) break;
if(i >= str.length) return "";
for(j=str.length-1;j>=0;j--)
if(str.charAt(j) != ‘’ ‘’) break;
return str.substring(i,j+1);
}
function uisNum(str)
{
var i, cChar;
str = trimString(str);
for(i=0;i<str.length;i++)
{
cChar = str.charAt(i);
if( !(("0"<=cChar) && (cChar<="9")) )
return false;
}
return true;
}
</script>
原文转自:http://www.ltesting.net