jtn
Jeg skal hente nogle poster fra en database med eksempeltvis 100 poster, på den html side hvor de bliver udskrevet skal max kunne vise 10 af gangen. Brugeren skal have mulighed for at bladre i tabellen med knapperne < og > hvis brugeren ser på de sidste 10 poster skal knappen > ikke være til sted og hvis brugeren ser på de første 10 poster skal knappen < ikke være til stede. Dernæst skal der være en oversigt over de "tabel-sider" der er.
Det er faktisk en anelse kompliceret, ikke fordi det er særligt svært, men det er en del kode. Men vi kan da godt prøve. Helt specifikt kaldes metoden for paging. Den kode jeg viser her er sakset fra et web-projekt jeg har lavet, og linkene se således ud: 1-10 11-20 21-30 osv. Hvor den sektion man står i, ikke er et hyperlink. Den funktionalitet du nævner vil jeg lade være op til dig. Du skal være opmærksom på at der kan være noget projekt specifik kode herunder, som skal tilpasses dit projekt. Du kalder proceduren ShowListing med den SQL streng der skal
<%
Dim RecordSet
Dim RecordField
Dim RecordCount
Dim StrPageIndex
Dim IntPageIndex
Dim IntPageCount
Sub ShowListing(ASQL) '
OpenConn ' Initialiser database forbindelse og dataset
Set RecordSet = Server.CreateObject("ADODB.recordset")
RecordSet.PageSize = 10 ' Antal poster per side
RecordSet.CursorLocation = adUseClient
RecordSet.Open ASQL, DBConn, adOpenDynamic, adLockReadOnly ' DBConn er connection object
RecordCount = RecordSet.RecordCount
if not (RecordSet.BOF and RecordSet.EOF) then
Call InitializePaging
Response.write "<table>" & vbCrLF
Call WriteHeader
Call WriteRecords
Response.write "</table>" & vbCrLF
Call WriteFooter
end If
if not (RecordSet is nothing) then RecordSet.close
Set RecordSet = Nothing
CloseConn
End Sub
Sub InitializePaging()
StrPageIndex = "" & Request.QueryString("pg")
if IsNumeric(strPageIndex) then
IntPageIndex = CInt(strPageIndex)
IntPageCount = RecordSet.PageCount
if IntPageIndex < 1 then IntPageIndex = 1
if IntPageIndex > IntPageCount then IntPageIndex = IntPageCount
else
IntPageIndex = 1
IntPageCount = RecordSet.PageCount
end if
RecordSet.AbsolutePage = intPageIndex
end Sub
Sub WriteHeader
Dim SortURL
Dim QStr
Dim idx
Response.write "<thead style=""background-color:gray;font-weight:bolder"">" & vbCrLf
for each RecordField in RecordSet.Fields
' Rebuild URL
SortURL = ""
QStr = ""
for each QStr in Request.QueryString
if QStr <> "sort" then SortURL = SortURL & Qstr & "=" & _
Request.QueryString(QStr) & "&"
next
QStr = SortURL & "sort=" & RecordField.Name
SortURL = Request.ServerVariables("URL") & "?" & QStr
Response.Write " <th>" & vbCrLf
Response.Write " <a href=""" & SortURL & """ class=""list"">" & _
RecordField.Name & "</a>" & vbCrLf
Response.Write " </th>" & vbCrLf
next
Response.Write " </thead>" & vbCrLf
End Sub
Sub WriteRecords
Dim idx
Dim Value
idx = 0
Response.Write " <tbody>" & vbCrLf
Do while not (RecordSet.eof or _
(RecordSet.AbsolutePage > IntPageIndex))
if (idx mod 2) = 0 then
Response.Write " <tr style=""background-color:moccasin"">" & vbCrLf
else
Response.Write " <tr style=""background-color:silver"">" & vbCrLf
end if
idx = idx + 1
for each RecordField in RecordSet.Fields
value = "" & trim(RecordField.Value)
if value = "" then value = " "
Response.Write " <td>" & value & "</td>" & vbCrLf
next
Response.write " </tr>" & vbCrLf
RecordSet.MoveNext
Loop
Response.Write " <tbody>" & vbCrLf
end sub
Sub WriteFooter
Dim idx
Dim strPages
%>
<table>
<tr>
<td style="text-align:left">
<%
for idx = 1 to IntPageCount
strPages = (idx - 1) * 10 + 1 & "-" & _
FindSmallest( idx * 10, RecordCount)
if (idx <> IntPageIndex) then %>
<a href="default.asp?pg=<%=idx%>"
class="bodylink" <%=SetStatus("", "Side " & strPages)%>>
<% end if
Response.Write strPages
if (idx <> intPageIndex) then Response.Write "</a>"
response.Write " " & vbCrLf
next
%>
</td>
<td style="text-align:right">
<b>Side <%=intPageIndex%> / <%=IntPageCount%></b>
</td>
</tr>
</table>
<%
End Sub
Function FindSmallest(ItemA, ItemB)
if ItemA < ItemB then
FindSmallest = ItemA
else
FindSmallest = ItemB
end if
End Function
%>
---
Thomas Due
Software developer
udvikleren.dk - ASP redaktør
tdue@mail.dk
[Redigeret d. 22/09-03 09:27:12 af Thomas Due]