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]