分页过程中遇到的问题,高分求解!!人在随时给分!
如下是我调用的部分,可以实现分页!数据库条数,页数等等返回的值也是对的!
只有一部分不对,也是问题的所在,我举个例子在下面:(假设有8条记录,每页显示5条,这样会分2页出来)
--------这是第一页内容---------(注意记录显示的顺序和记录的内容!)
1.aaaaaaa
2.bbbbbbb
3.ccccccc
4.ddddddd
5.eeeeeee
-------------------------------
--------这是第二页内容---------(注意记录显示的顺序和记录的内容!)
1.aaaaaaa
2.bbbbbbb
3.ccccccc
-------------------------------
在第二页中记录个数是对的,但是内容有问题!重复了第一页中的前3条记录!确显示应该是如下这样的:
6.fffffff
7.ggggggg
8.hhhhhhh
就是这样的问题,由于使用了上面的分页类,小弟对类还不是很熟悉,所以请高手帮忙看一眼,高分相送!人在可以立即给分!
<%
dim rsphoto,photosql
set rsphoto = server.createobject("adodb.recordset")
photosql = "select pid,title from photo where cid=" & id & " order by pid desc"
rsphoto.open photosql,conn,1,1
if rsphoto.eof then
response.write("<font color=""red"">暂时还没有图片!</font>")
else
dim a,totallist,listlimit,pagelists,i
set a = new pagelist
totallist = rsphoto.recordcount
listlimit = 8
pagelists = 2
a.initpara = array(totallist,listlimit,pagelists)
a.pagelist()
for i = a.getstart to a.getend
response.write("<li><a href=""photo.asp?cid=" & id & "&pid=" & rsphoto("pid") & "&" & okey & """>" & gottopic(rsphoto("title"),30) & "</a></li>")
rsphoto.movenext
next
response.write a.pageinfo
rsphoto.close
set rsphoto = nothing
end if
%>
问题点数:100、回复次数:9Top
1 楼z8h8y8(新鸟菜手)回复于 2006-05-04 10:16:59 得分 0
附上小弟使用的分页类。
Class PageList
Private PerPage
Private PerLimit
Private PerPageLimit
Private TotalNums
Private TotalPage
Private PageUrl
Private PageStart
Private PageEnd
Private PageStyle
Private PageHeader
Private PageBody
Private PageBottom
Private DisplayInfo
Private Sub Class_Initialize()
On Error Resume Next
Set PageStyle = CreateObject("Scripting.Dictionary")
PageStyle.Add "DS","false"
PageStyle.Add "PN","true"
PageStyle.Add "JP","true"
PageStyle.Add "BY","true"
PerPage=cint(Request.QueryString("page"))
End Sub
Public Property Let InitPara(PLRs)
If isArray(PLRs) Then
TotalNums=PLRs(0)
PerLimit=PLRs(1)
PerPageLimit=PLRs(2)
Else
TotalNums=1
PerLimit=1
PerPageLimit=1
End If
End Property
Public Property Let DisplayStyle(styleParameter)
If isArray(styleParameter) Then
PageStyle.Item("DS")=styleParameter(0) '动态样式
PageStyle.Item("PN")=styleParameter(1) '上下页样式
PageStyle.Item("JP")=styleParameter(2) '表单样式风格
PageStyle.Item("BY")=styleParameter(3) '设置主体部分风格
End If
End Property
Public Property Get PageInfo()
PageInfo=DisplayInfo
End Property
Public ProPerty Get GetPerPage()
GetPerPage=PerPage
End ProPerty
Public ProPerty Get GetTotalPage()
GetTotalPage=TotalPage
End ProPerty
Public ProPerty Get GetStart()
GetStart=(PerPage-1)*PerLimit+1
End ProPerty
Public Property Get GetEnd()
Dim Ends
Ends=GetStart()+PerLimit-1
If Ends>TotalNums Then Ends=TotalNums
GetEnd=Ends
End Property
Public Sub PageList()
Call SetDefaultStyle()
Call SetPageUrl()
Call SetTotalPage()
Call SetPerPage()
Call SetStaticDynamic()
Call SetDisplayPageInfo()
End Sub
Private Sub SetDefaultStyle()
If PageStyle("DS")="false" Then
If PageStyle("PN")<>"no" Then PageStyle("PN")="true"
End If
If PageStyle("BY")="no" Then PageStyle("PN")="false"
End Sub
Private Sub SetPageUrl()
On Error Resume Next
Dim queryString
Dim tmp_str
Dim tmp_key,tmp_array
queryString =Request.ServerVariables("QUERY_STRING")
queryString = Split(Request.ServerVariables("QUERY_STRING"), "&")
For Each tmp_key In queryString
tmp_array = Split(tmp_key,"=")
If tmp_array(0)<>"page" Then
tmp_str = tmp_str & tmp_array(0) & "=" & tmp_array(1) & "&"
End If
Next
PageUrl="http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME")&"?"&tmp_str
End Sub
Private Sub SetTotalPage()
TotalPage=Abs(Int(-TotalNums/PerLimit))
End Sub
Private Sub SetPerPage()
If PerPage<=0 Then
PerPage=1
elseIf PerPage>TotalPage Then
PerPage=TotalPage
End IF
End Sub
Public Function GetPerNextInfo()
Dim per,nexts
If PerPage>1 Then
per=PerPage-1
Else
per=false
End If
If PerPage<TotalPage Then
nexts=PerPage+1
Else
nexts=false
End If
GetPerNextInfo=array(per,nexts)
End Function
Public Function GetPerNextMoreInfo()
Dim start,ends
If PerPage>PerPageLimit Then
start=PageStart-1
Else
start=false
End If
If PageEnd<TotalPage Then
ends=PageEnd+1
Else
ends=false
End If
GetPerNextMoreInfo=array(start,ends)
End FunctionTop
2 楼z8h8y8(新鸟菜手)回复于 2006-05-04 10:17:05 得分 0
Private Sub SetDynamicPageInfo()
PageStart=PerPage
If PageStart<=0 Then PageStart=1
PageEnd=PerPageLimit+PageStart-1
If PageEnd>TotalPage Then PageEnd=TotalPage
End Sub
Private Sub SetMidDynamicPageInfo()
Dim add
add=fix(PerPageLimit/2)
PageStart=PerPage-add
If PageStart<=0 Then PageStart=1
PageEnd=PerPageLimit+PageStart-1
If PageEnd>TotalPage Then PageEnd=TotalPage
End Sub
Private Sub SetStaticPageInfo()
Dim starts
starts=PerPage/PerPageLimit
If starts-fix(starts)>0 Then
starts=fix(starts)
Else
starts=starts-1
End If
PageStart=starts*PerPageLimit+1
PageEnd=PageStart+PerPageLimit-1
If PageEnd>TotalPage Then PageEnd=TotalPage
End Sub
Private Sub SetStaticDynamic()
If PageStyle("DS")="false" Then
SetStaticPageInfo()
ElseIF PageStyle("DS")="true" Then
If PageStyle("PN")="true" Then
SetDynamicPageInfo()
Else
SetMidDynamicPageInfo()
End If
Else
SetStaticPageInfo()
End If
End Sub
Public Function GetPerNextMore(mark)
Dim tmp_str
If PageStyle("PN")="false" or PageStyle("PN")="no" Then
PageBody=PageBody&""
GetPerNextMore=""
Exit Function
End If
Dim IfPerNextArray
IfPerNextArray=GetPerNextMoreInfo()
If PageStyle("DS")="true" and PageStyle("DS")="true" Then
IfPerNextArray(0)=IfPerNextArray(0)+1-PerPageLimit
If IfPerNextArray(0)<=0 Then IfPerNextArray(0)=1
If PerPage=1 Then IfPerNextArray(0)=false
End If
If IfPerNextArray(0) and mark="true" Then tmp_str="<font face='Webdings'><a href="&PageUrl&"page="&IfPerNextArray(0)&" title=前"&PerPageLimit&"页>9</a></font>"&chr(10)
If IfPerNextArray(1) and mark<>"true" Then tmp_str="<font face='Webdings'><a href="&PageUrl&"page="&IfPerNextArray(1)&" title=后"&PerPageLimit&"页>:</a></font>"&chr(10)
PageBody=PageBody&tmp_str
GetPerNextMore=tmp_str
End Function
Public Function GetPerNext(mark)
Dim tmp_str
If PageStyle("PN")<>"false" Then
GetPerNext=""
Exit Function
End If
IfPerNextArray=GetPerNextInfo()
If IfPerNextArray(0) and mark="true" Then tmp_str="<font face='Webdings'><a href="&PageUrl&"page="&IfPerNextArray(0)&" title= 前一页>3</a></font> "
If IfPerNextArray(1) and mark<>"true" Then tmp_str="<font face='Webdings'><a href="&PageUrl&"page="&IfPerNextArray(1)&" title=后一页>4</a></font>"
PageBody=PageBody&tmp_str
GetPerNext=tmp_str
End Function
Public Function GetPageHeader()
Dim tmp_str
If PageStyle("DS")="no" Then
GetPageHeader=""
Exit Function
End If
tmp_str="第"&PerPage&"页/共"&GetTotalPage()&"页 共"&TotalNums&"条"
PageHeader="<div style='float:left;display:inline;width:25%'>"&tmp_str&"</div>"&Chr(10)
GetPageHeader=tmp_str
End Function
Public Function GetPageBody()
If PageStyle("BY")="no" Then
GetPageBody=""
Exit Function
End IF
For PageStart=PageStart to PageEnd
If PerPage=PageStart Then
PageBody=PageBody&"<a href="&PageUrl&"page="&PageStart&" title=第"&PageStart&"页><span style='color:#F00'><b>["&PageStart&"]</b></span></a>"&Chr(10)
Else
PageBody=PageBody&"<a href="&PageUrl&"page="&PageStart&" title=第"&PageStart&"页>["&PageStart&"]</a>"&Chr(10)
End If
Next
GetPageBody=PageBody
End Function
Private Sub SetPageBody()
GetPerNextMore("true")
GetPerNext("true")
GetPageBody()
GetPerNextMore("false")
GetPerNext("false")
PageBody="<div style='float:left;display:inline;width:45%;text-align:center'>"&PageBody&"</div>"&Chr(10)
End Sub
Public Function GetPageEnd()
Dim tmp_str,i
If PageStyle("JP")="no" Then
GetPageEnd=""
PageBottom=""
Exit Function
ElseIF PageStyle("JP")="true" Then
tmp_str="跳到<select name='pageSelect' onChange='document.location=this.value'>"
For i=1 to GetTotalPage()
If i=PerPage Then
tmp_str=tmp_str&"<option value="&PageUrl&"page="&i&" selected>"&i&"</option>"
Else
tmp_str=tmp_str&"<option value="&PageUrl&"page="&i&">"&i&"</option>"
End If
Next
tmp_str=tmp_str&"</select>页"
ElseIF PageStyle("JP")="false" Then
tmp_str="<input type='text' name='pageSelect' id='pageSelect' size='3' maxlength='5' value='"&PerPage&"'>"
tmp_str=tmp_str&" <input type='button' value='GO' onClick=""document.location='"&PageUrl&"page='+ pageSelect.value"">"
End If
PageBottom="<div style='float:right;display:inline;width:20%'>"&tmp_str&"</div>"&Chr(10)
GetPageEnd=tmp_str
End Function
Private Sub SetDisplayPageInfo()
GetPageHeader()
SetPageBody()
GetPageEnd()
DisplayInfo="<div style='margin:5px;'>"&chr(10)&PageHeader&PageBody&PageBottom&"</div>"
End Sub
End ClassTop
3 楼z8h8y8(新鸟菜手)回复于 2006-05-04 12:09:21 得分 0
没人帮忙吗?代码很长,但是我想问题并不是很复杂吧?请大家来看看,帮帮忙忙。高分谢过。Top
4 楼moodboy1982(老鹰)回复于 2006-05-04 12:30:30 得分 0
这么长的代码??
关于分页的代码有很多。你的类也太长了点吧。
容易出错。Top
5 楼moodboy1982(老鹰)回复于 2006-05-04 12:32:42 得分 20
如果感兴趣的话,可以去:http://www.esoftnow.com/bbs/index.asp?boardid=2
看看里面的相关文章。Top
6 楼z8h8y8(新鸟菜手)回复于 2006-05-04 13:10:17 得分 0
说的也是,可是我觉得他这个分页类的速度挺快,而且样式也比较好看才用的。:)Top
7 楼wangcaiwen()回复于 2006-05-04 13:13:55 得分 80
你的问题在于没有给出当前记录所在的页码
既recordset的absolutepage属性没有定义
导致一直获取的是第一页记录,所以记录值一直相同
Private Sub Class_Initialize()
On Error Resume Next
Set PageStyle = CreateObject("Scripting.Dictionary")
PageStyle.Add "DS","false"
PageStyle.Add "PN","true"
PageStyle.Add "JP","true"
PageStyle.Add "BY","true"
PerPage=cint(Request.QueryString("page"))
rsphoto.absolutepage=PerPage
End Sub
你把这一段换上应该可以了,大家相互学习,不过你整那么多类实在是有点问题
本来简单的分页程序就被你给搞复杂了Top
8 楼z8h8y8(新鸟菜手)回复于 2006-05-04 13:20:38 得分 0
谢谢楼这位大侠!我也觉得代码很长,试过很多分页类,能推荐几个好的分页类吗?再次感谢。Top
9 楼z8h8y8(新鸟菜手)回复于 2006-05-04 13:41:52 得分 0
感谢了!Top




