webForumDet fria alternativet

Paging med en Repeater

.NETur .NET

5 svar · 589 visningar · startad av T_Codez

Medlem sedan juli 2001458 inlägg
Frågan#1

hallå igen...

Jag vill att inläggen i gästboken ska ha en gammal hederlig "paging". Och givetvis så var det inte
lika lätt att fixa det i en repeater som det var i en datagrid.

Har kollat runt på nätet en del och noterat att det finns några alternativ men inte kunnat klura
ut "när var hur", typ

Tacksam för alla uppslag som kan styra till en paging till min gästbok


    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here

        Dim mId As Integer
        If IsNumeric(Request.QueryString("mId")) Then
            mId = Request.QueryString("mId")
            mId = 1
        Else
            mId = 0
        End If

        If Not IsPostBack Then
            Repeater1.DataSource = CreateDataSource("SELECT * FROM tblGuestbook_Comments WHERE tblGuestbook_Comments.guestbookID = 1" & " order by tblGuestbook_Comments.AddDate desc", mId)
            Repeater1.DataBind()
        End If

    End Sub

    Public Function CreateDataSource(ByVal SQL As String, ByVal mId As Integer) As ICollection

        Dim sLink As String

        Dim Conn As New SqlConnection(strConn)
        Dim Command As New SqlCommand(SQL, Conn)
        Conn.Open()

        Try
            Dim Reader As SqlDataReader
            Reader = Command.ExecuteReader()
            Dim dt As New DataTable
            Dim dr As DataRow
            Dim rComments
            dt.Columns.Add(New DataColumn("tbGbookHeaderRep", GetType(String)))
            dt.Columns.Add(New DataColumn("tbGbookDateRep", GetType(String)))
            dt.Columns.Add(New DataColumn("tbGbookCommentRep", GetType(String)))
            dt.Columns.Add(New DataColumn("tbGbookNameRep", GetType(String)))
            dt.Columns.Add(New DataColumn("tbGbookEmailRep", GetType(String)))

            While Reader.Read
                dr = dt.NewRow()
                dr(0) = Reader("Rubrik").ToString
                dr(1) = Reader("AddDate").ToString
                dr(2) = Reader("comments").ToString
                dr(3) = Reader("name").ToString
                dr(4) = Reader("email").ToString
                dt.Rows.Add(dr)

            End While
            Reader.Close()
            Dim dv As New DataView(dt)
            Return dv
        Catch ex As SqlException
            Response.Write(ex.Message)
        Finally
            Conn.Close()
        End Try
    End Function

Tack för uppmärksamheten
mvh/ TT

Medlem sedan sep. 20026 425 inlägg
#2

Du kan använda PagedDataSource. PagedDataSource @ Google SE

Medlem sedan juli 2001458 inlägg
#3

Tackar... det löste sig med den rackaren... :birp

Medlem sedan mars 20002 836 inlägg
#4

PagedDataSource är ju inte optimalt när man har många poster. Det den gör är att hämtar ut alla records, och sedan plockar ut "rätt snapshot". M a o, mycket overhead.
Tryck in >100k poster i en tabell och testa ;) ...

Beroende på databas så går det ju att hämta ut "rätt snapshot" med hjälp av sql-query och 2 parametrar, vilken sida som ska hämtas ut och sidstorleken (antal poster per sida).

cya,
/PatrikB

Medlem sedan juli 2001458 inlägg
#5

Noterat att det blir lite tungt när det är många poster... (har cirka 180 just nu som testdata bara)

Jag använder mig av SQL-Server... Funkar det med den!? Tar tacksamt emot alla tänkbara tips... För att kunna effektivisera det hela...

(Markerar den därför som olöst för att se om det går att göra den/det bättre).

Medlem sedan nov. 20041 189 inlägg
#6

Här hittade jag något:
http://www.aspfaq.com/sql2005/show.asp?id=11

252 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
128 ms — hämta forumlista (db)
120 ms — hämta statistik (db)
130 ms — hämta tråd, inlägg och bilagor (db)