这个分页代码使用很简单,只有4个步骤: (1)构造 SQL 查询语句、设置数据库连接字符串、设置每页记录显示数目 (2)插入分页控制代码 <b>navigator_init.inc</b> 文件 (3)在页面的适当地方(即你想显示“上页、下页”的地方),插入分页导航代码 <b>navigator.inc</b> (4)用循环显示本页记录
<一> 需要分页的 ASP 文件
sample.asp
<% ' 取得当前 ASP 页面的完整路径,重要技巧 theScript = Request.ServerVariables("SCRIPT_NAME")
' (1)构造 SQL 语句
myconnstr = "driver={SQL Server};server=yourserver;uid=sa;pwd=;database=yourdatabase" thePageSize = 20 ' 每页显示的记录数
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>
<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>
</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
<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> |