|  | Bläddra några åt gången
  
Sidan 4 av 7[ 1 ]
	
		[ 2 ]
	
		[ 3 ]
	
		[ 4 ]
	
		[ 5 ]
	
		[ 6 ]
	
		[ 7 ]
 
 
 
		
			
			| 10 | Textrad 18 |  
			
			| 11 | Textrad 19 |  
			
			| 12 | Textrad 2 |  Det är inte alltid så intressant att bläddra i en LÅNG lista. För att 
dela upp datat i mer "lättsvalda" delar kan man välja att visa ett fast
antal rader per sida och sedan ge bläddringsmöjligheter
 
För att göra detta möjligt måsta några ändringar komma in från föregående listningsexempel 
Lösningarna på dessa problem är:Vi kan inte använda connection.Execute eftersom den 
skapar ett "ForwardOnly" resultat och vi behöver kunna bläddra.
Vi måste säga åt Recordset objektet hur många rader det skall vara på en sida.
Vi måste kunna säga åt sidan att den skall bläddra
Vi måste kunna säga åt tabellen vilken sida (vilka rader) som skall visas
 
Detta leder till:Vi skapar ett recordset objekt medSet recordset = Server.CreateObject("ADODB.RecordSet")
 och använder sedan
 recordset.Open SQL SATS, Connection, 1, 1
 för att öppna en "bläddringsbar" KeySet
Vi kan använda recordset.PageSize = RADANTAL för att säga 
hur många rader som skall visas
Vi kan sända via URL:n vilken sida som skall visas. T.ex ?PAGE=3 skall ta
fram sidan 3
Vi kan använda recordset.AbsolutePage för att ta 
fram en viss sida
 
Koden är kanske inte optimal ur prestandasynvinkel, utan jag har försökt 
göra en kod som enkelt går att modifiera för sina egna behovFör att kontakta databasen och tabellen skriver vi
 
<!-- #include file="connection.asp" -->Const RADANTAL = 3
 Const SQL = "SELECT * FROM EXEMPELDATA ORDER BY aTEXT"
 
 ' Först en "normal" öppnade av connection o recordset
 Set Conn = Server.CreateObject("ADODB.Connection")
 Conn.Open strConn
 
 ' Kan INTE använda en Exeute för att öppna tabellen
 ' eftersom vi måste kunna bläddra i tabellen
 ' vi använder istället följande konstruktion
 Set RS = Server.CreateObject("ADODB.RecordSet")
 
 ' Den första ettan (1) betyder att vi öppnar tabellen som en
 ' KeySet. I den kan vi bläddra. Den andra ettan betyder att
 ' vi öppnar som ReadOnly...
 RS.Open SQL, Conn, 1, 1
 
 ' En tabell kan hanteras i lite större block genom att
 ' säga att den har en PageSize (= rader per sida )
 RS.PageSize = RADANTAL
 
 ' Vikan även kontrollera hur många sidor det blir med
 ' den PageSize vi gav
 MAX = RS.PageCount
 
 
För att få sidan vi vill till på URL:n kan vi göra följande
 
<a href="<% =Request.ServerVariables("URL")%>?PAGE=1">Första</a>Istället för text i href:arna kan vi självklart lägga in bilder
 <a href="<% =Request.ServerVariables("URL")%>?PAGE=
 <% = nuvarande sida - 1%>">Föregående</a>
 
 <a href="<% =Request.ServerVariables("URL")%>?PAGE=
 <% = nuvarande sida + 1%>">Nästa</a>
 
 <a href="<% =Request.ServerVariables("URL")%>?PAGE=
 <% = sista sidan%>">Sista</a>
 
 Men även följande lösning kan vara användbar för att sätta upp en länklista.
 
 
<% For sida = 1 To MAX %><% if sida = PAGENO Then %>
 <b>[ <%=sida%> ]</b>
 <% Else %>
 <a href="<% =Request.ServerVariables("URL")%>?PAGE=
 <% =sida %>">[ <%=sida%> ]</a>
 <% End If %>
 <% Next %>
 
 
 
För att sedan göra någonting av den PAGE=n som kommer kan vi skriva följande:
 
<%' Om det fanns ?PAGE=n på adressraden så antar vi att
 ' vi vill gå till sidan n
 if Not IsEmpty(Request("PAGE")) Then
 ' kan väl kontollera att det var en siffra
 ' just in case...
 if IsNumeric(Request("PAGE")) Then
 PAGENO = CInt(Request("PAGE"))
 Else
 ' i annat fall så får det bli sidan 1
 PAGENO = 1
 End If
 else
 ' första gången till sidan - ta fram rad ett
 PAGENO = 1
 end if
 
 ' Vi kanske är intresserade av vilken rad som är först i listan
 ' detta kan räknas ut på följande sätt
 ROW = (PAGENO - 1) * RADANTAL + 1
 
 ' Stöder databasen bookmark (Access borde göra detta)
 harBookmark= RS.Supports(8192)
 
 If harBookmark Then
 ' gå direkt till rätt sida
 RS.AbsolutePage = PAGENO
 Else
 ' Annars (klumpigare o långsammare)
 RS.MoveFirst
 RS.Move PAGENO - 1
 End If
 %>
 
För att visa själva listningen kan man skriva följande
 
<table border="1" cellspacing="0" cellpadding="5" width="400"><%
 raden = 0
 Do While Not RS.EOF And raden < RADANTAL
 %>
 <!--
 Här börjar en tabellrad. Kommer att upprepas
 för förklaring till denn asp kod
 -->
 <tr>
 <!-- Först en cell med en radnummer -->
 <td align="right">
 <% =ROW + raden %>
 </td>
 <!-- och sedan innehållet i ett fält med namnet aTEXT -->
 <td>
 <% =RS("aTEXT") %>
 </td>
 </tr>
 <!-- Tabellraden tog slut -->
 <%
 raden = raden + 1
 RS.MoveNext
 Loop
 %>
 </TABLE>
 
 
Klicka på "Visa ASP koden för denna sida" länken nedan för ytterligare förklaringar 
 |  |