基于组件的asp编程之二--分页对象

类别:Asp 点击:0 评论:0 推荐:

基于组件的asp编程之二--分页对象

 

  在asp中,分页使用的最多的程序段了,把分页写成函数,调用起来,要传很多参数,写成对象,可以使分页

对象调用简单,本文在参考众多网友的分页函数基础上,用javascript把它写成了一个对像放于文件

夹"_ScriptCom"下,文件名为"JPageNavbar.asp",先看一下分页对象的调用方式(由于大多数的asp开发人员使

用vbscript,所以本文的实例采用vbscript编写):
<%@LANGUAGE="VBSCRIPT" %>
<!--#include file="../connections/dbconn.asp" -->
<!--#include file="../_ScriptCom/FAdodb.asp" -->
<!--#include file="../_ScriptCom/FSession.asp" -->
<!--#include file="../_ScriptCom/JPageNavbar.asp" -->
<%
   Response.Buffer=true
   on error resume next
   
   if trim(Request.ServerVariables("REQUEST_METHOD")) = "POST" then
      '取得查询字符串
       chxstr=readForm("chxstr")   
        xshstr=readForm("xshstr")   
        r1=readForm("R1")
       '保存查询条件
       session("r1")=r1
       session("chxstr")=chxstr
       session("xshstr")=xshstr 
   else
       如果不是从form提交,则是分页,从session取的查询条件
        r1=readSession("r1")
        chxstr=readSession("chxstr")
        xshstr =readSession("xshstr")
   end if
  
  '这里是一些关于业务的逻辑运算
  if xshstr=empty then
       xshstr ="查询所有记录"
   end if
   
    select case r1
    case 1 '在校学生
        sql=" select * from v_student_base where  graduate=0"
        if chxstr<>empty then
           sql=sql+"  and "+ chxstr
        end if 
        cddr="在校学生"
    case 2 ' 毕业学生   
        sql=" select * from v_student_base where  graduate=1"
         if chxstr<>empty then
           sql=sql+"  and "+ chxstr
        end if 
       cddr="毕业学生"
    case 0 '全部学生   
       if chxstr<>empty then
          sql="select * from v_student_base where"+"  "+chxstr
       else
         sql="select * from v_student_base"
       end if
       cddr="全部学生"
   case else
       response.write "系统参数错误,请与系统管理员联系!"
       response.End
   end select
 
   '生成connection 和 Recordset
   set conn=connCreate(getDBLink())
   set rs=rsCreate()
   rs.open sql,conn,1,3
   if (rs.eof ) then
      show_msg "很遗憾,没有您要的记录!",4,"infoQuery.asp"
   end if
    dim gd(1)
 gd(0)="未毕业"
 gd(1)="已毕业"
 
  '***************************************************************************
  '注意:这里是分页
  RowCount =15
 set fy=createJPageNavbar()
 if (not isEmpty(rs)) then
  rs.PageSize = RowCount '设置数据集的页记录
  fy.PageSize=RowCount
  rs.AbsolutePage =fy.getCurrentPage()
  fy.RecordCount=rs.RecordCount
  fy.PageCount=rs.pageCount
  fy.PnWidth="100%"
  fy.PnAlign="center"
  fy.PlWidth="100%"  '表格宽度
  fy.PlAlign="right"  ' 表格的对齐方式
end if  
'***********************************************************************************
%>
<HTML>
<HEAD>
<TITLE>学生信息查询</TITLE>
<link href="../css/style.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY text="#000000" bgColor="#ffffff" leftMargin="0" topMargin="0">
<br>
<TABLE width="550" border="1" cellspacing="0" cellpadding="1" align="center" class="t_table"

ID="Table1">
  <TR>
    <TD colspan="2" class="t_head"> :::学生信息搜索结果::: </TD>
  </TR>
  <TR>
    <TD width="80%" align="left"><B>==&gt;&gt;查询条件:</B> <%=xshstr %></TD>
    <TD width="20%" align="right"><INPUT type="button" value="返回" class="button"

onclick="gofind()" ID="Button1" NAME="Button1"> </TD>
  </TR>
  <TR>
    <TD colspan="2"><table width="100%" border="0" cellpadding="1" cellspacing="0"

class="t_table" ID="Table2">
        <tr align="center">
          <td colspan="7"><%
        '***************************************************
          fy.pnDisplay() '分页的“上一页” “下一页”
      '***********************************************************
          %></td>
        </tr>
        <tr>
          <td width="13%" class="t_head">学号</td>
          <td width="11%"  class="t_head">姓名</td>
          <td width="8%"  class="t_head">性别</td>
          <td width="10%"  class="t_head">年级</td>
          <td width="20%"  class="t_head">专业</td>
          <td width="28%"  class="t_head">二级学院</td>
          <td width="10%"  class="t_head">状态</td>
        </tr>
  <%  i=0
                 '********************************************************
    while (not rs.eof and i<RowCount)  '控制一页显示的记录条数
               '*********************************************************
%>
        <tr>
          <td width="13%" align="center"><a href="#"  onclick="openWindow2('stu_msg.asp?

stu_num=<%= rs("stu_num")%>')"><%= rs("stu_num") %></a></td>
          <td width="11%" align="center"><%= rs("name") %></td>
          <td width="8%" align="center"><%= rs("sex") %></td>
          <td width="10%" align="center"><%= rs("gread") %></td>
          <td width="20%" align="center"><%= rs("speciality_name") %></td>
          <td width="28%" align="center"><%= rs("secondary") %></td>
          <td width="10%" align="center"><%=gd(rs("graduate")) %></td>
        </tr>
  <% i=i+1
     rs.moveNext
   wend %>
        <tr align="right">
          <td colspan="7"><%
'**************************************************************       
fy.plDisplay() '分页列表
'**************************************************************
         %></td>
        </tr>
      </table> </TD>
  </TR>
</TABLE>
</BODY>
</HTML>
<%
  rsNull(rs)
  connNull(conn)
%>

这里是分页显示的效果图(做了一下处理)


这里是源代码

<SCRIPT LANGUAGE=javascript RUNAT=Server>
// ************************************************************************
// Script Compont Object Model
// Design for Active Server Pages
//
// Copyright 2003  Version 1.0
// Made by newsunet
// 请不要删除这一段注释,自由传播,保留所有权
// ************************************************************************

/*//Ado.RecordSet记录分页对象
//设置分页
  var  RowCount =3
  var fy=new JPageNavbar()
   if (!rsRpt.Eof){
     rs.PageSize = RowCount //设置数据集的页记录
     fy.PageSize=RowCount
     rs.AbsolutePage =fy.getCurrentPage()
     fy.RecordCount=rs.RecordCount
     fy.PageCount=rs.pageCount
     fy.PnWidth="100%"
  fy.PnAlign="right"
  fy.PlWidth="100%"  //表格宽度
  fy.PlAlign="right"  // 表格的对齐方式

  }
 //显示分页
<%fy.pnDisplay()%>
<%fy.plDisplay()%>

*/
function createJPageNavbar(){

 //这个函数是vbscript的接口函数 ,vbscript不是基于对象的脚本语言
  var objJPageNavbar=new JPageNavbar
  return objJPageNavbar
}
function JPageNavbar(){
// public members
 this.PageSize="0"
 this.RecordCount="0" //总记录数
 this.PageCount="1"  //总页数
 this.CurrentPage="1"
 
 this.PnWidth="100%"
 this.PnAlign="right"
 this.PlWidth="100%"  //表格宽度
 this.PlAlign="right"  // 表格的对齐方式

 // private members
 
 //public methods
 this.getCurrentPage=_getCurrentPage
 this.pnDisplay = _PN_show;
 this.plDisplay = _PL_show;
 
 //private methods
 
}
 
    function _getCurrentPage(){
         //当前显示的是第几页
        
       //取得当前页
       var pageNo = Request.QueryString ("PageNo")
       //如果没有选择第几页,则默认显示第一页;
       if (isNaN(pageNo)) {
        pageNo = 1
       }
       this.CurrentPage=pageNo
       return pageNo
   }
   function  _PL_show(){
     
      var strBuilder=new String()
      strBuilder=""
      var p=(this.CurrentPage-(this.CurrentPage%10))/10 //计算分页显示的页数
      //首组为第0族
  
  strBuilder+="<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" "
     strBuilder+=" width=\""+this.PlWidth+"\"  align=\""+this.PlAlign+"\">"
    
     strBuilder+=" <tr> "
     strBuilder+=" <td valign=\"middle\" align=\"right\">分页:"
    
     if (this.CurrentPage==1){
    strBuilder+="<font face=\"webdings\"  color=\"#ff0000\">9</font> "
  } 
     else{
    strBuilder+="<a href=\"?PageNo=1\" title=\"首页\"><font face=\"webdings\">9</font></a>   "
  } 
     //上十页
     if (p*10>0){
       strBuilder+="<a href=\"?PageNo="+(p*10)+"\"  title=上十页><font

face=\"webdings\">7</font></a>   "
     } 
     strBuilder+="<b>"
      //分页列表
     for(var i=p*10+1;i<=p*10+10;i++){
        if (i==this.CurrentPage){
      strBuilder+="<font color=\"#000000\">"+i+"</font> "
     }
    else{
   strBuilder+="<a href=?PageNo="+i+" title=\"转到: 第"+i+"页\">"+i+"</a>   "
     }
    if (i>=this.PageCount) break;
  } 
  strBuilder+= "</b>"
      //显示下十页
      if (i<this.PageCount){
        strBuilder+="<a href=\"?PageNo="+i+"\" title=\"下十页\"><font

face=\"webdings\">8</font></a>   "
      } 
       //显示尾页
      if (this.CurrentPage==this.PageCount){
       strBuilder+= "<font face=\"webdings\" color=\"#000000\">:</font>   "
   }   
      else{
     strBuilder+= "<a href=?PageNo="+this.PageCount+" title=\"尾页\"><font

face=\"webdings\">:</font></a>   "
   } 
     strBuilder+= "</td></tr></table>"
     Response.Write(strBuilder)
  }
  function  _PN_show(){
    var strBuilder=new String()
    var nextPageNo
    strBuilder=""
    strBuilder+="<table border=\"0\"  cellpadding=\"0\" cellspacing=\"0\" "
    strBuilder+="  width=\""+this.PnWidth+"\" align=\""+this.PnAlign+"\">"
    strBuilder+="<tr>"
    strBuilder+="<td valign=\"middle\">页次:

[<b>"+this.CurrentPage+"</b>/<b>"+this.PageCount+"</b>]页 每页[<b>"+this.PageSize+"</b>]条 总记录

数:[<b>"+this.RecordCount+"</b>]条</td>"
    strBuilder+="<td align=\"right\">"
 if (this.CurrentPage>1){
   nextPageNo=this.CurrentPage
   nextPageNo--
      strBuilder+="[<a href=?pageNo="+nextPageNo+"  title=\"转到上一页\">上一页</a>]"
    }
    if (this.CurrentPage<this.PageCount){
      nextPageNo=this.CurrentPage
      nextPageNo++
      strBuilder+="[<a href=?pageNo="+nextPageNo+"  title=\"转到下一页\">下一页</a>]"
    }
 strBuilder+="</td></tr></table>"
 Response.Write(strBuilder)
  }

</SCRIPT>


本文原名:asp分页的基于对象的解决


 

本文地址:http://com.8s8s.com/it/it9119.htm