在客户端执行数据库记录的分页显示
在ASP程序应用中经常有一个任务就是在一个分页格式中显示数据库的查询结果。比如,当处理大量的记录内容时,应该一次只显示10个项目,这样就会使访问者使用这些信息更容易些。网络上已经有许多文章示范了多种对数据库查询结果进行分页的方法,其中较好的文章包括: 【文章来自:开店乐电子商务研究KaiDianLe.Com】
使用存储过程对数据库记录进行分页
数据库分页样本代码 使用GetRows对记录进行分页
但是所有这些文章介绍的方法都是在服务器端进行分页处理的。举例来说,假如有30条数据库记录,我们希望一次显示10条记录。当用户请求第一页数据时,ASP页面就提取前10条记录并将它们发送给客户。当用户已经作好准备可以阅览下面10条记录时,他就点击一个链接,这时ASP页面就被重新装载,通过查询字符串传递进来一个新的页面值,ASP页面将取出第11条到20条记录,并将它们发给用户。
本文中我们将把这整个处理过程移植到客户端。当用户联机查看数据时,这30个记录将全部以客户端javascript 数组的形式发送到客户机上。另外,附加的客户端javascript代码负责显示第1到第10条记录,并且链接到后面或者前面的记录集。当点击这些链接时,将执行客户端javascript代码,新的数据会显示出来。由于这些都是在客户端发生的,因此只有在页面第一次被装载时才需要与Web服务器联系,从而省却服务器与客户端间的数据传递消耗,无疑大大地提高了应用程序的性能。
所需要的客户端脚本
要实现在客户端显示分页的数据库记录,ASP页面应该生成什么样的客户端脚本呢?如同前面所述,我们需要创建一个客户端数组。因为我们准备在一个HTML表格中显示数据库记录,那么就要创建一个HTML数组,也许用它来显示一个HTML TABLE行(<tr><td> Database Value </td></tr>)。这个数组中将包含所有我们希望允许用户翻阅的数据库元素。
我们还需要一个客户端的javascript函数以显示这些数组值的子集。使用这个函数,我们可以显示前N 个记录;当用户点击一个链接时,就可以显示后面(或前面) N个记录。也就是说,这个函数负责客户端分页。
最后,我们还需要一些方法在不更新页面的情况下来动态改变一个HTML页面的显示。这可以通过DHTML(动态HTML)来实现。要实现这个目的,我们需要在堆积所有输出的地方创建一个HTML DIV标记,然后使用客户端javascript代码在这个DIV标记中动态修改内容。关于使用DHTML的更多信息,请阅读动态HTML入门及跨浏览器DHTML教程。
创建一个分页类
要记住,这里举例的整个应用程序只包括一个ASP页面。当这个ASP页面被访问时,它将创建执行记录分页需要的所有客户端javascript代码。为简化这个过程,我创建了一个VBScript类来处理这个功能。使用这个类的时候,开发人员只需将他希望在访问者的Web浏览器上进行分页的记录集传递进来即可。关于类的使用,请阅读在VBScript中使用类。
我将这个类命名为dhtmlGetRows,它包含两个属性和一个方法。两个属性是:
1、 RecsPerPage:确定每一页显示多少个记录。
2、 THString:通过一个HTML表格显示这个进行了分页的结果;这个属性允许你为表格的标题指定一个字串。
单一的方法是GenerateHTML(RecordsetObject),它为分页应用程序返回完整的HTML:客户端javascript代码和需要的DIV 标记。这个方法只需要一个参数RecordsetObject,它应该是一个记录集对象,其中填充了你希望在一个分页格式中显示的数据库数据。
这个类的代码相当长,并且大部分代码都只是返回客户端的javascript代码。下面是类的代码:
<%
Class dhtmlGetRows
'******* PRIVATE MEMBER VARIABLES **********
Private iRecsPerPage
Private strTHString
'*******************************************
'************ Initialize Event *************
Private Sub Class_Initialize()
iRecsPerPage = 10 'assign a default value
End Sub
'*******************************************
'************ PROPERTY LET/GET *************
Public Property Let THString(strValue)
'Replace all apostrophes with \'
strTHString = Replace(strValue, "'", "\'")
End Property
Public Property Get THString()
THString = strTHString
End Property
Public Property Let RecsPerPage(iValue)
If iValue > 0 and IsNumeric(iValue) then
iRecsPerPage = CInt(iValue)
End If
End Property
Public Property Get RecsPerPage()
RecsPerPage = iRecsPerPage
End Property
'*******************************************
'**************** METHODS ******************
Public Function GenerateHTML(objRS)
'Begin by getting an array of the data
Dim aValues
aValues = objRS.GetRows()
'Find the value of rows and columns
Dim iCols, iRows
iCols = UBound(aValues, 1)
iRows = UBound(aValues, 2)
Dim strOutput
'Display the initial script block
strOutput = "<script language=""javascript"">" & vbCrLf & _
"var tableRow = new Array(" & iRows & ");" & vbCrLf & vbCrLf
Dim iLoop, iColLoop, strTmp
For iLoop = 0 to iRows
strOutput = strOutput & "tableRow[" & iLoop & "] = '<tr>"
For iColLoop = 0 to iCols
'Fix apostrophes
strTmp = Replace(aValues(iColLoop, iLoop),"'", "\'")
'Remove carraige returns
strTmp = Replace(strTmp, vbCrLf, "")
strOutput = strOutput & "<td>" & strTmp & "</td>"
Next 'iColLoop
strOutput = strOutput & "</tr>';" & vbCrLf
Next 'iLoop
'Init global varaibles and find out what browser the user is using
strOutput = strOutput & vbCrLf & vbCrLf & "var first = 0;" & vbCrLf & _
"var last = " & iRecsPerPage & ";" & vbCrLf & _
"var mynav;" & vbCrLf & "if (navigator.appName == ""Netscape"")" & _
vbCrLf & vbTab & "mynav = ""NS"";" & vbCrLf & _
"if (navigator.appName == ""Microsoft Internet Explorer"")" & _
vbCrLf & vbTab & "mynav = ""IE"";" & vbCrLf & _
vbCrLf & "</script>" & vbCrLf & vbCrLf
'Now display the HTML table
strOutput = strOutput & vbCrLf & "<div id=""grid""> </div>" & vbCrLf & _
vbCrLf & vbCrLf & "<script language=""javascript"">" & vbCrLf
'Write the nav function
strOutput = strOutput & "function nav(iVal) {" & vbCrLf & _
"// do we want to move forward or backwards?" & vbCrLf & _
"if (iVal == 1) { " & vbCrLf & vbTab & "first += " & _
iRecsPerPage & ";" & vbCrLf & "last += " & iRecsPerPage & _
vbCrLf & "}" & vbCrLf & "else if (iVal == -1) { " & vbCrLf & vbTab & _
"first -= " & iRecsPerPage & ";" & vbCrLf & vbTab & "last -= " & _
iRecsPerPage & ";" & vbCrLf & "}" & vbCrLf & _
vbCrLf & vbCrLf & "var txt = '';" & vbCrLf & _
"txt += '<table border=""1"">';" & vbCrLf
'Do we need to add a TH string?
If Len(strTHString) > 0 then
strOutput = strOutput & "txt += '<tr>" & strTHString & "</tr>';" & vbCrLf
End If
strOutput = strOutput & "for (var iLoop = first; iLoop < last; iLoop++)" & vbCrLf & _
vbTab & "if (iLoop <= " & iRows & ") txt += tableRow[iLoop];" & vbCrLf & _
"txt += '</table>';" & vbCrLf & vbCrLf
'Now, show next/prev links if applicable
strOutput = strOutput & "if (first > 0) // show prev link" & vbCrLf & _
vbTab & "txt += '<a href=""javascript:nav(-1);"">Prev " & _
iRecsPerPage & "</a> ';" & vbCrLf & vbCrLf & _
"if (last <= " & iRows & ") // show next link" & vbCrLf & vbTab & _
"txt += '<a href=""javascript:nav(1);"">Next " & _
iRecsPerPage & "</a>';" & vbCrLf & vbCrLf
'Write out the new HTML content to the DIV tag
strOutput = strOutput & "// write out the the DIV tag depending on browser..." & vbCrLf & _
"if (mynav == ""NS"") {" & vbCrLf & vbTab & _
"document.layers['grid'].document.write(txt);" & vbCrLf & vbTab & _
"document.close();" & vbCrLf & "}" & vbCrLf & vbCrLf & _
"if (mynav == ""IE"")" & vbCrLf & vbTab & _
"document.all['grid'].innerHTML = txt;" & vbCrLf & vbCrLf & _
"}" & vbCrLf & vbCrLf
strOutput = strOutput & "nav(0);" & vbCrLf & "</script>"
GenerateHTML = strOutput
End Function
'*******************************************
End Class
%>
在结束之前,我想要快速地解释一下怎样在一个ASP页面中使用这个类。由于这个类只包含一个方法,因此使用这个类相当简单。你所需要做的就是创建并填充一个记录集对象,然后创建一个类的例示,并使用Response.Write输出objClassInstance.GenerateHTML(objRS)的值。
<!--#include file="dhtmlGetRows.class.asp"-->
<%
'Create and populate a Recordset
Dim objRS, objConn, strSQL
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "DSN=MyDSN"
strSQL = "SELECT TOP 25 ViewCount, Description " & _
"FROM tblFAQ ORDER BY ViewCount DESC"
Set objRS = objConn.Execute(strSQL)
'Create an instance of the dhtmlGetRows class
Dim objPagedResults
Set objPagedResults = new dhtmlGetRows
objPagedResults.THString = "<th>Views</th><th>FAQ Question</th>"
Response.Write objPagedResults.GenerateHTML(objRS)
'Clean up...
Set objPagedResults = Nothing
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
以上的代码片段假定dhtmlGetRows类可以在一个服务器端包含文件dhtmlGetRows.class.asp中使用。
【日期:2006-8-7】【作者:不祥】【转载自:开店乐】
相关文章:
最好的网上开店系统:凡人网络购物系统免费下载
Rs.open sql,conn,A,B 的A、B各代表什么?
ASP开发中存储过程应用全接触
Oracle大文本在ASP中存取问题的解决
数据分页方法新思路,速度非常快!
ASP+vbscript写的万能查询表达式生成器
常用网站数据库SQL操作语句
ASP程序与SQL存储过程详解
ASP脚本一空间绑定多个域名代码
WEB编程开发常用的代码大全
解决大字段在Form中Post出错的方法
学习ASP之编写安全的ASP代码
ASP程序应用之模板采用
防止别人批量采集功能的ASP代码
网页图片下拉选择控件使用实例
平时写程序的时候出错时的解决方法
“在线访客”的制作方法
ASP中数据库调用时常见错误的现象和解决
ASP 编程中20个非常有用的例子
经典实用的基础asp程序整理
ASP中从数据库读取二进制文件数据代码
ASP动态生成的javascript表单验证代码
在电子商务中实现购物车的方法
ASP利用Google实现在线翻译功能
实现千万级数据分页的存储过程
详细说明用ASP和WML来实现数据库查询
ASP访问INTERBASE数据库
ASP安全配置不完全手册
在ASP中如何访问Novell下的数据库
ASP进阶学习必经之认识数学函数11种
初学者必读 ASP运行环境的搭建
解析asp的脚本语言
学习使用ASP对象和组件
让ASP程序运行于非Windows平台
通过启动脚本来感受ASP的力量
一些不长见的ASP调用存储过程的技巧
使用ASP脚本技术
优化Web数据库页面
Asp限制IP访问代码
ACCESS数据库防下载另类方法
ASP浏览器性能组件
细说ASP中Counters 组件
全面解析Server对象
ASP 内建对象Request和Respones
深入研究Application和Session对象
使用ASP、VB和XML建立运行于互联网上的应用程序
在客户端执行数据库记录的分页显示
对ASP脚本源代码进行加密
用代码打开Access文件的两种方法
使用Visual InterDev进行小组开发
用JScript脚本实现分页的另类办法
ASP中Cookie读写的实现方法
如何使用ASP建立虚拟的FTP服务器
在ASP中自动创建多级文件夹的函数
一个硬盘文件搜索的Asp源码
ASP使用MYSQL数据库全攻略
ASP上传数据流格式分析详解
ASP汉字转换UTF-8及UTF-8转换GB2312
ASP常用数据库连接及操作的方法
ASP编程中常用SQL命令使用方法
ASP查询记录时RecordCount=-1问题
让你的WAP网站有更好的兼容性
如何注册服务器端组件
轻松实现任何程序和动易整合
在服务器端调用winzip命令行对上传的多个文件打包压缩
用ASP制作强大的搜索引擎
ASP彩色校验码的制作
ASP 系列函数大全
ASP程序处理进程进度条
Asp无组件生成缩略图
用ASP实现自动建站.实现虚拟二级目录
删除Access数词库中的空记录
ASP身份证验证代码函数
ASP写的自动生成SELECT表单的函数
几种打开记录集方式的比较
用ASP实现汉字转拼音的功能
ASP分页代码,已经写成类了,值得参考
ASP下载系统防盗链方法
Global.asa文件用法大全
如何防止页面中的敏感信息被提取
Delphi编写组件封装asp代码的基本步骤
制做行背景颜色交替变换的表格
如何用foreach遍历页面上所有的TextBox
将数据库中的信息存储至XML文件中
用Asp写个加密和解密的类
如何固定表格的标题行和标题列
ASP小偷(远程数据获取)程序入门教程
Asp编写不再让人讨厌的自动弹出窗口
用ASP实现在线压缩与解压缩
使用组件封装ASP的数据库操作
ASP中读写注册表
ASP判断函数一览及网页制作常用技术
ASP中Cookie使用指南
随机产生用户密码(good)
ASP:如何对身份证的籍贯进行验证
ASP产生随机密码的函数
ASP+ADO实现数据读写简单示例
一个简单的用户登录接口ASP实现
ASP+SQL Server构建网页防火墙
一个通用的保护ASP系统的方法
利用ASP发送和接收XML数据的处理方法
版权所有:Kaidianle.Com 联系方式:Shnxn@Yhaoo.Com.Cn 京ICP备06028743号 在线留言