CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

求解ASP动态生成表格的分页程序,比较难解

楼主ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)2006-12-31 14:34:20 在 Web 开发 / ASP 提问

<table   class=MainBlock   cellSpacing=0   cellPadding=0   width="70%"   border=0   align="center">  
  <%  
  dim   PageNo  
  Set   conn   =   Server.CreateObject("ADODB.Connection")  
  Set   rs   =   Server.CreateObject("ADODB.Recordset")  
  conn.open   connstr  
  sql   =   "zjreport"  
  rs.open   sql,conn,1  
  'set   rs   =   conn.execute(sql)  
  if   rs.eof   then  
  response.write   "<tr><td   colspan=18>暂时没有记录</td></tr></table>"  
  response.end  
  end   if  
  PageSize   =   request.Cookies("PageSize")  
  if   not   IsNot(PageSize,"n")   then   PageSize   =   DefaultPageSize  
  rs.pagesize   =   PageSize  
  PageCount   =   rs.PageCount  
  PageNo   =   request("PageNo")  
  if   PageNo   =   ""   or   CInt(PageNo)   <   1   then   PageNo   =   1  
  if   CInt(PageNo)   >   PageCount   then   PageNo   =   PageCount  
   
  rs.absolutepage   =   PageNo  
   
  i   =   0  
  while   not   rs.eof   and   i   <   rs.pagesize  
  %>  
            <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class=MainBlock_Client><%response.write   rs.fields(x).name%>  
                      &nbsp;</td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movefirst  
      do   while   not   rs.eof  
      %>  
              <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class="bluefont"><%response.write   rs.fields(x).value%></td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movenext  
      loop  
  i   =   i   +   1  
  wend  
      %>  
       
      <%  
  rs.close  
  set   rs   =   nothing  
  conn.close  
  set   conn   =   nothing  
  %>  
   
   
  <tr   bgcolor="#EFEFEF">  
  <td   colspan="6">  
  <a   href="1_zjreport.asp?PageNo=1>"<font   face="Webdings">5</font>第一页</a>  
  <a   href="1_zjreport?PageNo=<%=   PageNo   -   1   %>"><font   face="Webdings">3</font>上一页</a>  
  <a   href="1_zjreport?PageNo=<%=   PageNo   +   1   %>"><font   face="Webdings">4</font>下一页</a>  
  <a   href="1_zjreport?PageNo=<%=   PageCount   %>"><font   face="Webdings">6</font>最后一页</a>  
  </td>  
  </tr>      
       
  </table>  
   
   
  ==================================  
  上面的代码已经可以动态生成表格了,但是分页还没有办法实现,现在的问题是所有的内容都显示在一页上,但是在表的最后的“上一页”“下一页”和“最后页”链接中所显示的数字应计算的都对,不知为什么? 问题点数:20、回复次数:28Top

1 楼xiaojie_cp()回复于 2006-12-31 14:48:09 得分 0

看不清你具体的写法是什么意思,但能看出你用了while循环,不要用它,改用for  
  比如For   i   =   1   To   Rs.PageSize  
  ....  
  NextTop

2 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 15:47:55 得分 0

我试一下,顶上去Top

3 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 16:06:03 得分 0

不是这里的问题Top

4 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 16:07:46 得分 0

<tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class=MainBlock_Client><%response.write   rs.fields(x).name%>  
                      &nbsp;</td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movefirst  
      do   while   not   rs.eof  
      %>  
              <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class="bluefont"><%response.write   rs.fields(x).value%></td>  
                  <%next%>  
              </tr>  
   
   
  rs.fields.count,rs.fields.value,???这里的写法有问题Top

5 楼xiaojie_cp()回复于 2006-12-31 16:23:30 得分 0

为什么非要用rs.fields.count,用rs.pagesizeTop

6 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 16:28:48 得分 0

______________________________________________________________________  
  rs.absolutepage   =   PageNo  
   
  for   i=1   rs.pagesize  
  %>  
            <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class=MainBlock_Client><%response.write   rs.fields(x).name%>  
                      &nbsp;</td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movefirst  
      do   while   not   rs.eof  
      %>  
              <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class="bluefont"><%response.write   rs.fields(x).value%></td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movenext  
      loop  
  next  
      %>  
   
   
  ___________________________________________________________  
   
   
  你说是这样吧,但问题的中心现在好像是如你所改把所有的表数据内容输出了PAGESIZE次,但并没有真正的实现分PAGESIZE页,每页defaultpagesize个,晕我都说不清楚了,你看这里,  
  <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class="bluefont"><%response.write   rs.fields(x).value%></td>  
                  <%next%>  
              </tr>  
  实际上是输出了所有的数据内容,但现在我不知道如何写把它改成    
   
  比如:  
  第一页的rs.fields(x).value指的是X从1到defaultpagesize(假设定义每页显示30行),然后第二页从31行到60行这样,  
       
  Top

7 楼regin_me(秋枫)回复于 2006-12-31 16:51:25 得分 0

你测试一下取得的PageNo的值Top

8 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 16:56:20 得分 0

pageno的值没有问题,我可能描述不清,现在的问题就在这一段上:  
   
    <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class=MainBlock_Client><%response.write   rs.fields(x).name%>  
                      &nbsp;</td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movefirst  
      do   while   not   rs.eof  
      %>  
              <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class="bluefont"><%response.write   rs.fields(x).value%></td>  
                  <%next%>  
              </tr>  
              <%  
  就是不知如何去改Top

9 楼regin_me(秋枫)回复于 2006-12-31 16:57:57 得分 0

你把PageNo   =   request("PageNo")  
   
  PageNo   =   clng(request("PageNo"))试试Top

10 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 16:59:21 得分 0

谢谢楼上老大的建议,我知道这里,但问题不在这里,是在我说的上面的那段Top

11 楼regin_me(秋枫)回复于 2006-12-31 17:02:49 得分 0

对了,你为什么要这样做呢?完全可以用:  
  <%  
  Do   While   Not   rs.Eof  
          response.write   "<td   class=bluefont>"   &   rs("字段名")   &   "</td>"  
          rs.movenext  
  Loop  
  %>Top

12 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 17:03:44 得分 0

那字段值呢?字段值要实现多少行一页的分页啊Top

13 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 17:04:38 得分 0

并且主要是字段的数量不是确定不变的随着程序的不同,表格的字段多少会不同Top

14 楼regin_me(秋枫)回复于 2006-12-31 17:05:04 得分 0

如果需要分页,可以用一个变量,然后exit   do就可以实现分页了。Top

15 楼wfwclyms(苍狼)回复于 2006-12-31 17:10:22 得分 0

呵呵,楼上的都有问题啊,怎么现在都没人了呢?  
   
  你的这个do   while   not   rs.eof  
  没有跳出循环的条件设定啊,所以分页都对,但是在第一页上把所有的东西都给现实出来了,你现在的效果应该是第一页是所有的内容,第二页上是从第二页开始的所有内容,总之是越往后越少。  
   
  加一个判断,比如在do循环中加一个参数,每次循环加1,当它等于每页要现实的纪录数,就跳出do循环就好了。  
  Top

16 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 17:12:01 得分 0

楼上大哥讲的差不多,但有一个问题是第一页是所有内容,点下一页,或其它都   提示无法显示Top

17 楼ejren(拜托好心人牵条狗叼走我的良心,我想风光的活下去)回复于 2006-12-31 17:16:31 得分 0

郁闷啊,这里不能切图,要不就能看清楚了Top

18 楼regin_me(秋枫)回复于 2006-12-31 17:28:45 得分 5

把你那段改成这样  
  <%  
  Dim   strHtml  
  Do   While   Not   Rs.Eof   and   Cint(i)   <   Cint(pagesize)  
          strHtml   =   strHtml   &   "<tr>"  
          strHtml   =   strHtml   &       "<td>"   &   rs("字段名1")   &   "<td>"   &   rs("字段名2")  
          i   =   i   +   1  
          rs.MoveNext  
  Loop  
  %>  
  <%=strHtml%>Top

19 楼regin_me(秋枫)回复于 2006-12-31 17:29:58 得分 0

看看有没有问题。Top

20 楼regin_me(秋枫)回复于 2006-12-31 17:49:20 得分 5

看看这个吧。  
   
  <%  
  Dim   objCon  
  Dim   objRs  
  Dim   strSql  
  Dim   strHtml  
  Dim   pageSize  
  Dim   pageCount  
  Dim   PageNo  
  Dim   i  
   
  Set   objCon   =   Server.CreateObject("ADODB.Connection")  
  objCon.open   connstr  
   
  Set   objRs   =   Server.CreateObject("ADODB.RECORDSET")  
   
  strSql   =   "select   *   from   exTable"  
  objRs.Open   strSql,objCon,1,1  
  If   Not   objRs.Eof   Then  
  pageSize   =   Request("pageSize")  
  PageNo   =   clng(Request("page"))  
  objRs.pageSize   =   pageSize  
  pageCount   =   objRs.Pagecount  
  if   PageNo<1   or   PageNo=empty   then   PageNo=1  
  if   PageNo>pageCount   then   PageNo=pageCount  
  objRs.AbsolutePage   =   strPageNo  
  Do   While   Not   objRs.Eof  
  strHtml   =   strHtml   &   "<tr>"  
  strHtml   =   strHtml   &       "<td>"   &   objRs("字段1")  
  i   =   i   +   1  
  If   i   >   pageSize   Then   Exit   Do  
  objRs.MoveNext  
  Loop  
  End   If  
  objRs.Close  
  Set   objRs   =   Nothing  
  objCon.Close  
  Set   objCon   =   Nothing  
  %>Top

21 楼plought()回复于 2006-12-31 22:19:37 得分 5

 
  ********testpage.asp********  
  <%  
  Dim   conn,Rs,SQLcmd,DBPath,DatabaseName,TableName  
  Const   SET_OPENDATABASE   =   0      
  Const   abOpenStatic   =   3  
  Const   abLockPessimistic   =   2  
  Const   abNotLockmistic   =   1  
  DatabaseName   =   "设置数据库文件路径(含文件名)"  
  TableName   =   "设置数据表名"  
  server.scripttimeout   =   10000  
   
  pageID   =   Request("txtpage")  
  pruskID   =   Request("tuskID")  
  tmpval=0  
  if   not   IsNumeric(pageID)   then   ErrorBox("参数错误!")  
  if   Is_lng(pageID)   or   Is_int(pageID)   then  
        ltval=true  
  else  
        ltval=false  
  end   if  
  if   not   ltval   then     ErrorBox("参数错误!")  
  if   pruskID=""   or   pruskID=empty   then  
        pruskID=""  
  end   if  
  ipagevar   =   1  
  showasp   =   "testpage.asp"  
  %>  
   
  <HTML>  
  <HEAD>  
  <TITLE></TITLE>  
  </HEAD>  
  <BODY>  
  <%  
  set   conn   =   Server.CreateObject("ADODB.connection")  
  DBPath=Server.MapPath(DatabaseName)  
  conn.Open="provider=Microsoft.JET.OLEDB.4.0;data   source="   &   DBPath  
   
  Set   Rs=   Server.CreateObject("ADODB.Recordset")  
  SQLcmd="Select   *   From   "&TableName&"   Order   by   tdate   desc"  
  Rs.Open   SQLcmd,conn,abOpenStatic,abLockPessimistic  
   
  if   not   rs.EOF   then    
        rs.pagesize   =   30               '///设置每页显示记录数  
        maxpage=rs.pageCount       '///最大页面数  
  end   if  
   
  if   pageID   <   1   then   pageID=1  
  if   (maxpage-pageID)   <   1   then   pageID=maxpage  
  %>  
   
  <DIV>  
  <TABLE   cellSpacing="0"   cellPadding="0"   width=100%   border="0">  
  <TBODY>  
  <TR><TD>  
  <%   call   changepage()%>  
  </TD></TR>  
  <%  
  if   rs.EOF   then  
      Response.write   "<TR><TD   width=3></TD>"  
      Response.write   "<TD>数据库没有记录</TD></TR>"  
  else  
      rs.MoveFirst  
      rs.Absolutepage   =   pageID    
      For   ipage=1   to   rs.Pagesize  
          Response.write   "<TR><TD>"&rs(x)&"</TD></TR>"  
          rs.MoveNext  
          if   rs.EOF   then   Exit   For  
      Next  
  end   if  
  %>  
  <TR><TD>  
  <%   call   changepage()%>  
  </TD></TR>  
  </TBODY></TABLE>  
  </DIV>  
   
  <%sub   changepage()%>  
  <table   border="0">  
  <tr><Form   method="GET"   action=<%=showasp%>   name="ifrm"><td>  
  <%if   pageID   <>   1   then%>  
  <a   href=<%=showasp%>?txtpage=1&tuskID=<%=pruskID%>>第一页</a>  
  <a   href=<%=showasp%>?txtpage=<%=(pageID-1)%>&tuskID=<%=pruskID%>>前一页</a>  
  <%end   if%>  
  <%if   pageID   <>   maxpage   then%>  
  <a   href=<%=showasp%>?txtpage=<%=(pageID+1)%>&tuskID=<%=pruskID%>>后一页</a>  
  <a   href=<%=showasp%>?txtpage=<%=maxpage%>&tuskID=<%=pruskID%>>最后一页</a>  
  <%end   if%>  
  当前显示页数位置:<%=pageID%>/<%=maxpage%>  
  输入页数:<input   type="text"   name="txtpage"   size="3"   value=<%=pageID%>></td>  
  <td><input   type="submit"   value="打开指定页"   name="cmdok"></td>  
  <td><input   type="hidden"   name="tuskID"   value=<%=pruskID%>></td>  
  <td><input   type="submit"   value="刷新"   name="cmdrenovate"></td>  
  </form></tr>  
  </table>  
  <%  
  end   sub  
  Sub   ErrorBox(text)  
      Response.write   "<script   language='javaScript'>"  
      Response.write   "   alert('"&text&"');"  
      Response.write   "history.go(-1);"  
      Response.write   "</script>"  
      Response.end  
  end   sub  
  %>  
  </BODY>  
  </HTML>Top

22 楼tangqiaojie(小米虫)回复于 2007-01-01 09:52:51 得分 5

LZ的意思是不是每页先显示表头,再显示该页的内容啊?,你下面这句就把全部页面都显示了  
  do   while   not   rs.eof  
      %>  
              <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class="bluefont"><%response.write   rs.fields(x).value%></td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movenext  
      loop  
  其实你如果要显示表头,在页面显示一次就够拉,不需要放进循环里面,而且你循环里面再循环是错的  
  if   not   rs.eof   then    
            %>  
            <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class=MainBlock_Client><%response.write   rs.fields(x).name%>  
                      &nbsp;</td>  
                  <%next%>  
              </tr>  
              <%  
   
   
  i   =   0  
  while   not   rs.eof   and   i   <   rs.pagesize  
     
      %>  
              <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class="bluefont"><%response.write   rs.fields(x).value%></td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movenext  
  i   =   i   +   1  
  wend  
      %>Top

23 楼tangqiaojie(小米虫)回复于 2007-01-01 09:53:37 得分 0

if   not   rs.eof   then    
            %>  
            <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class=MainBlock_Client><%response.write   rs.fields(x).name%>  
                      &nbsp;</td>  
                  <%next%>  
              </tr>  
              <%  
   
   
  i   =   0  
  while   not   rs.eof   and   i   <   rs.pagesize  
     
      %>  
              <tr>  
                  <%for   x=0   to   rs.fields.count-1%>  
                  <td   class="bluefont"><%response.write   rs.fields(x).value%></td>  
                  <%next%>  
              </tr>  
              <%  
      rs.movenext  
  i   =   i   +   1  
  wend  
   
  end   if  
      %>  
  Top

24 楼tangqiaojie(小米虫)回复于 2007-01-01 09:54:46 得分 0

上面的代码是替换i   =   0到wend的代码Top

25 楼hxyman(自由不自在)回复于 2007-01-02 13:20:20 得分 0

PageNo   =   request("PageNo")  
  if   PageNo   =   ""   or   CInt(PageNo)   <   1   then   PageNo   =   1  
  if   CInt(PageNo)   >   PageCount   then   PageNo   =   PageCount  
   
  rs.absolutepage   =   PageNo  
   
  最后一句应该为rs.absolutepage   =   cint(PageNo)  
  因为你上面只考虑了不正常的情况,没有考虑合法输入的情况.Top

26 楼quni1984(我终日跪膝祈祷,愿耶稣将爱常存我心!阿门!!!)回复于 2007-01-03 14:31:51 得分 0

:)Top

27 楼Michael_g()回复于 2007-01-04 10:43:53 得分 0

在打开记录集之前指定页大小才行!!!!!Top

28 楼Michael_g()回复于 2007-01-04 11:06:34 得分 0

i   =   0  
  while   not   rs.eof   and   i   <   rs.pagesize  
  ...  
      rs.movefirst        
  .....  
        do   while   not   rs.eof  
  .....  
      rs.movenext  
   
      loop  
  ....  
   
  是这两个循出的问题,你在第二个循环里已经将所有的记录都显示出来了!  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:ejren
  • regin_me
  • regin_me
  • plought
  • tangqiaojie

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo