加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

ASP中实现分页显示的七种武器

发布时间:2016-10-08 22:15:07 所属栏目:Asp教程 来源:网络整理
导读:在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为方便、自由。而在Visual Inte

第四步:编写显示每一页的函数。其中使用了许多DHTML的属性和方法,请读者自行参考相关书籍。

Sub DisplayData()
startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 //计算每一页开始显示的记录号数(位置,第几条)
rowCtr = 1
lblPageNumber.innerHTML = gCurrentPageNumber & "/" & gMaxPageNumber
For recordPtr = startRecord To (startRecord + gRecordsPerPage - 1) //循环显示一页的各条记录
 If recordPtr > Recordset1.getCount() Then //显示空表
  Table1.rows(rowCtr).cells(0).innerHTML = "<P> </P>"
  Table1.rows(rowCtr).cells(1).innerHTML = "<P> </P>"
  Table1.rows(rowCtr).cells(2).innerHTML = "<P> </P>"
  Table1.rows(rowCtr).cells(3).innerHTML = "<P> </P>"
 Else //具体显示每一页
  Recordset1.moveAbsolute(recordPtr) //移动记录指针。
  empID = Recordset1.fields.getValue("emp ID")
  empLName = Recordset1.fields.getValue("first name")
  empFName = Recordset1.fields.getValue("last name")
  Table1.rows(rowCtr).cells(0).innerText = recordPtr ’ Counter
  Table1.rows(rowCtr).cells(1).innerText = empID
  Table1.rows(rowCtr).cells(2).innerText = empLName
  Table1.rows(rowCtr).cells(3).innerText = empFName
 End If
 rowCtr = rowCtr + 1
Next
End Sub

另外,我们还需要在window对象的onload事件中编写如下脚本:

For rowCtr = 1 to gRecordsPerPage
 Table1.insertRow(rowCtr) ’ 插一新列
 For cellCtr = 0 to 3
  Table1.rows(rowCtr).insertCell()
 Next
Next

第六种:服务器端控制翻页方法。

如果我们在服务器端对数据进行分页形成HTML语句后再输出到客户端,就不会存在浏览器不支持DHTML的问题了。可是用服务器端法使得我们每次翻页时,都得让Recordset控件重新产生一次,因此速度肯定要比用DHTML的方法慢。但如果服务器足够快的话,这点慢客户是察觉不到的。

下面的例子中,我将介绍一个新的DTC控件:PageObject。这个控件使被指定的网页成为一个网页对象,用户在此网页的服务器脚本中组织的子程序和函数可被看作是该网页对象的方法。它提供了管理状态信息的一种先进的方法:网页对象有一些属性(变量),用户可以定义这些属性的生存期。因为以上这些特性,使我们在编制翻页的脚本时非常方便。

但这种方法的缺点是:当你按了“上页”或“下页”按钮后,再浏览器上的按刷新按钮,网页会自动翻页。另外,如果按了浏览器上的“回退”按钮后,再按翻页按钮,可能会出现一次乱翻。这都是因为网页对象属性(全局变量)造成的。

第一步:拖Recordset控件到新建的网页emp6.asp中,名字为Recordset1,设置其属性,方法同第三种,此处略。

第二步:拖PageObject控件到网页中,取名叫emplist。然后右键单击此控件打开属性页并设置MaxPageNumber,RecordsPerPage,CurrrentPageNumber三个属性(全局变量)。VI6.0可用get和set方法来读写它们的值,具体用法请查阅相关资料。

第三步:编写Recordset1的ondatasetcomplete事件。

Function Recordset1_ondatasetcomplete()
recordsPerPage = 5
empList.setRecordsPerPage(recordsPerPage)//设置网页对象每页记录条数属性为5
totalRecordCount = Recordset1.getCount()//获得记录集的总条数
mpn = Int(totalRecordCount / recordsPerPage) //计算出mpn为总页数
If (totalRecordCount Mod recordsPerPage) > 0 then
mpn = mpn + 1
End If
empList.setMaxPageNumber(mpn)
End Function

第四步:拖四个button控件到网页中,编写翻页控制脚本。我们主要是通过改变网页对象的CurrentPageNumber属性的值来实现翻页。

Function btnFirst_onclick()’ 翻到首页
 empList.setCurrentPageNumber(1)
End Function
Function btnPrevious_onclick()’ 翻到上一页
 cpn = empList.getCurrentPageNumber()
 if cpn > 1 Then
  empList.setCurrentPageNumber(cpn - 1)
 End If
End Function
Function btnNext_onclick()’ 翻到下一页
 cpn = empList.getCurrentPageNumber()
 if cpn < empList.getMaxPageNumber() then
  empList.setCurrentPageNumber(cpn + 1)
 End If
End Function
Function btnLast_onclick() ’ 翻到末页
 empList.setCurrentPageNumber( empList.getMaxPageNumber() )
End Function

为保证首次进入该页时,显示的是第一页,我们还得编写该网页对象的onEnter事件。

Function empList_onEnter()
 If empList.firstEntered Then
  empList.setCurrentPageNumber(1)
 End If
End Function

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读