Jag använder mig av ett dataset och pagedDataSource. default.aspx:
<%@ Page Language="VB" Inherits="db_paging" Src="behind/codebehind.vb" Debug="True" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Titel</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
<form id="paging" runat="server">
<asp:Repeater id="main" runat="server">
<ItemTemplate><%# Container.DataItem("Namn") %><br /></ItemTemplate>
</asp:Repeater>
<asp:label id="lblerror" runat="server"></asp:label>
<asp:literal id="num_paging" runat="server" />
<asp:label id="lblerror2" runat="server"></asp:label>
<asp:label id="lblerror3" runat="server"></asp:label>
</form>
</body>
</html>
codebehind.vb:
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Data
Imports System.Data.OleDb
Imports System.Text
Imports Microsoft.VisualBasic
Public Class db_paging : Inherits Page
Dim pagedData As new pagedDataSource
Dim PageCounter, RecsCount, Show As integer
protected withevents main As Repeater
protected withevents lblerror, lblerror2, lblerror3 As label
protected withevents num_paging As literal
'proceduren som körs varje gång sidan laddas
Sub Page_Load(byVal obj As Object, byVal e As EventArgs)
If Not Page.IsPostBack Then
lblerror.Visible = False
lblerror2.Visible = False
lblerror3.Visible = False
doPaging()
NumericPages()
End If
End Sub
'funktionen för att plocka ut info ur databasen och fylla en OleDbDataAdapter med den
Function getData() As DataTable
'variabler för SQL-satsen, ett DataSet, anslutningensträngen till databasen, samt anslutningen till databasen
Dim SQL As string = "SELECT Namn FROM tbl ORDER BY Id"
Dim ds As new DataSet()
Dim CnStr As string = "Provider=Microsoft.Jet.OleDb.4.0; data source=" & Server.MapPath("db.mdb")
Dim Cn As new OleDbConnection(CnStr)
'skapa en OleDbDataAdapter och fyll Datasetet
Dim ODA As new OleDbDataAdapter(SQL, Cn)
ODA.Fill(ds, "tbl")
Return ds.Tables("tbl").Copy
'frigör resurser använda av OleDbDataAdaptern
ODA.Dispose()
End Function
'proceduren där parametrar för själva pagingen ställs in
Sub doPaging()
'ange en datakälla till pagingen (funktionen ovan), tillåt paging samt ange antalet poster som ska visas per sida
pagedData.DataSource = getData().DefaultView
pagedData.AllowPaging = True
pagedData.PageSize = 10 '<--- ändra siffran här till antalet poster du vill ha per sida
'räkna
RecsCount = pagedData.DataSourceCount
'felhantering med try..catch
Try
If Len(Request.Querystring("page"))=0 Then
pagedData.CurrentPageIndex = 0
Else
If Not IsNumeric(Request.Querystring("page")) Then
lblerror2.Visible = True
lblerror2.Text = "<p>Adressen till sidan måste vara numerisk, inte """ & Request.Querystring("page") & """.</p>"
Else
pagedData.CurrentPageIndex = Cint(Request.QueryString("page")) '.ToString()
End If
End If
'fånga upp eventuella fel på sidan och skriv ut felmeddelandet
Catch ex As Exception
pagedData.CurrentPageIndex = 0
lblerror3.Visible = True
lblerror3.Text = "Error: <b>" & ex.Message & "</b>"
End Try
'bind data till repeatern på huvudsidan
main.DataSource = pagedData
main.DataBind()
End Sub
'proceduren för att skriva ut (den numeriska) sidnavigeringen
Public Sub NumericPages()
'felhantering om användaren skriver i ett pagingtal i adressen som inte finns
If pagedData.CurrentPageIndex > pagedData.PageCount Then
lblerror.Visible = True
lblerror.Text = "Sidan " & Request.Querystring("page") & " finns inte i pagingen. Vänligen välj en sida nedan eller backa.<br />"
Show = 1
Else
Show = 1
End If
If Not Show = 0 Then
'skapa en StringBuilder för att kunna for .. next-loopen nedan ska fungera
Dim sb As new StringBuilder()
'for ... next-loopen för att skriva ut sidnavigeringen
'för tillfället blir sidan man är på ingen länk i pagingen, vill du att även den ska vara
'en länk så raderar du allt inom for ... next-loopen förutom den första sb.Append-raden
For Pagecounter = 1 To pagedData.PageCount
If Not pagedData.CurrentPageIndex = PageCounter-1 Then
sb.Append("<a href=""default.aspx?page=" & PageCounter-1 & """>" & PageCounter & "</a> ")
Else
If Not RecsCount <= pagedData.PageSize Then
sb.Append(Pagecounter & " ")
End If
End If
Next
'skriv ut StringBuilderns data
num_paging.Text = sb.toString()
End If
End Sub
End Class
