求解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%>
</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%>
</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%>
</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%>
</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%>
</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%>
</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




