网络编程
位置:首页>> 网络编程>> Asp编程>> ASP中实现分页显示的七种方法(3)

ASP中实现分页显示的七种方法(3)

作者:csbq  发布时间:2007-09-20 13:19:00 

标签:分页,asp

第五种:DHTML法二
  
    这种方法是对第四种方法的完善。采用手工编写脚本的方法,使我们能做“首页”,“末页”翻页导航按钮,并能确定每条记录的位置(记录号)。由于篇幅的关系,我在下面只介绍一个具体例子,并给出简要说明。其它关于DHTML和Recordset控件的一些属性和方法请读者自行参照相关书籍。这里需要提请注意的是,Recordset控件与第一、二种方法中介绍的ADO的Recordset对象有些不同:Recordset控件没有直接给出pagesize和pagecount等属性,需要用下面介绍的方法来计算。
  
    第一步:拖Recordset控件到新建的网页emp5.htm中,名字为Recordset1,设置其属性,方法同第三种,此处略。
  
    第二步:定义三个全局变量和编写Recordset1的ondatasetcomplete(数据设置完成时)脚本。
  



Dim gCurrentPageNumber //当前页号 
  Dim gMaxPageNumber //最大页数 
  Dim gRecordsPERPage //每页显示记录数 
  gRecordsPerPage = 5 // 设置每页显示记录数为5条记录。 
   
  Function Recordset1_ondatasetcomplete() 
  totalRecordCount = Recordset1.getCount() //总的记录条数 
  gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) //获得最大页数 
  If (totalRecordCount Mod gRecordsPerPage) > 0 then 
  gMaxPageNumber = gMaxPageNumber + 1 
  End If 
  End Function 


第三步:创建翻页导航按钮。


Function btnFirst_onclick() ’ 翻到首页 
   gCurrentPageNumber = 1 
   DisplayData() 
  End Function 
   
  Function btnPrevious_onclick() ’ 翻到上一页 
   if gCurrentPageNumber > 1 Then 
    gCurrentPageNumber = gCurrentPageNumber - 1 
    DisplayData() 
   End If 
  End Function 
   
  Function btnNext_onclick() ’ 翻到下一页 
   if gCurrentPageNumber < gMaxPageNumber Then 
    gCurrentPageNumber = gCurrentPageNumber + 1 
    DisplayData() 
   End If 
  End Function 
   
  Function btnLast_onclick() ’翻到末页 
   gCurrentPageNumber = gMaxPageNumber 
   DisplayData() 
  End Function 



第四步:编写显示每一页的函数。其中使用了许多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

 


第五步:编写显示每一页的脚本。



<HR><TABLE BORDER=0><TR>//显示表头 
  <TH ALIGN="left" WIDTH=35></TH> 
  <TH ALIGN="left" WIDTH=150>Emp ID</TH> 
  <TH ALIGN="left" WIDTH=200>Last Name</TH> 
  <TH ALIGN="left" WIDTH=200>First Name</TH></TR> 
  <% 
  pageNumber = empList.getCurrentPageNumber()//计算翻页所需的各种参数,同DHTML法二 
  recordsPerPage = empList.getRecordsPerPage() 
  startRecord = ((pageNumber - 1) * recordsPerPage) + 1 
  lastRecord = Recordset1.getCount() 
  For recordPtr = startRecord To (startRecord + recordsPerPage - 1)%> 
  <%If Recordset1.EOF = True Then%> 
  <TR> 
  <TD> </TD> 
  <TD> </TD> 
  <TD> </TD> 
  <TD> </TD> 
  </TR> 
  <%Else%> 
  <%Recordset1.moveAbsolute(recordPtr)%> 
  <TR> 
  <% If recordPtr <= lastRecord Then %> 
  <TD><%=recordptr%></TD> 
  <%Else%> 
  <TD> </TD> 
  <% End If %> 
  <TD><%=Recordset1.fields.getValue("emp ID")%></TD> 
  <TD><%=Recordset1.fields.getValue("last name")%></TD> 
  <TD><%=Recordset1.fields.getValue("first name")%></TD> 
  </TR> 
  <%End If%> 
  <%Next%> 
  </TABLE><HR> 


0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com