Skip to content

Instantly share code, notes, and snippets.

@dannylloyd
Created April 23, 2013 19:46
Show Gist options
  • Select an option

  • Save dannylloyd/5446799 to your computer and use it in GitHub Desktop.

Select an option

Save dannylloyd/5446799 to your computer and use it in GitHub Desktop.
Paged repeater code to populate data from generic object
Option Strict Off
Imports Extendo
Imports System.ComponentModel
Imports System.Reflection
<ParseChildren(True)>
Public Class PagedRepeater
Inherits System.Web.UI.UserControl
Public Property PageSize As Integer
Get
If ViewState("PageSize") Is Nothing Then
ViewState("PageSize") = 0
End If
Return DirectCast(ViewState("PageSize"), Integer)
End Get
Set(value As Integer)
ViewState("PageSize") = value
End Set
End Property
Public Property PageNumber As Integer
Get
If ViewState("PageNumber") Is Nothing Then
ViewState("PageNumber") = 0
End If
Return DirectCast(ViewState("PageNumber"), Integer)
End Get
Private Set(value As Integer)
ViewState("PageNumber") = value
End Set
End Property
Public Property TheType As Type
Get
Return DirectCast(ViewState("ObjectType"), Type)
End Get
Set(value As Type)
ViewState("ObjectType") = value
End Set
End Property
Public Property Query As PetaPoco.Sql
Get
Return DirectCast(ViewState("Query"), PetaPoco.Sql)
End Get
Set(value As PetaPoco.Sql)
ViewState("Query") = value
End Set
End Property
Public Sub BindData()
'Settings.Db.Page(Of Entities.Request)(PageNumber, PageSize, Query)
' .
' .:;:.
' .:;;;;;:.
' ;;;;;
' ;;;;;
' ;;;;;
' ;;;;;
' ;:;;;
' : ;;;
' This is the same as this but it is needed because of the use of generics. Daniel Lloyd
' ;;;;.
' ;;;;;
' ;;;;;
' ;;;;;
' ;;;;;
' ;;;;;
' ..;;;;;..
' ':::::'
' ':`
Dim methodInfo As MethodInfo = GetType(PetaPoco.Database) _
.GetMethods() _
.Where(Function(m) m.Name = "Page" AndAlso m.GetParameters().Length = 3) _
.Single()
Dim page = methodInfo.MakeGenericMethod(TheType).Invoke(Settings.Db, New Object() {PageNumber + 1, PageSize, Query})
lblCurrentPage.Text = (PageNumber + 1).ToString() + " of " + page.TotalPages.ToString()
pager.Visible = Not page.TotalItems = 0
btnPrev.Enabled = Not (PageNumber = 0)
btnNext.Enabled = Not (PageNumber + 1 = page.TotalPages)
btnPrevContainer.AddRemoveClass((PageNumber = 0), "disabled")
btnNextContainer.AddRemoveClass((PageNumber + 1 = Page.TotalPages), "disabled")
rptData.DataSource = page.Items
rptData.ItemTemplate = Me.ItemTemplate
rptData.DataBind()
End Sub
Public Sub SetDataSource(Of T)(data As PetaPoco.Sql)
TheType = GetType(T)
Query = data
BindData()
End Sub
Protected Sub btnPrev_Click(sender As Object, e As EventArgs)
PageNumber -= 1
BindData()
End Sub
Protected Sub btnNext_Click(sender As Object, e As EventArgs)
PageNumber += 1
BindData()
End Sub
<Category("Behavior"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerDefaultProperty)> _
Public Property ItemTemplate As ITemplate
Get
Return DirectCast(ViewState("listViewEmptyTemplate"), ITemplate)
End Get
Set(value As ITemplate)
ViewState("listViewEmptyTemplate") = value
End Set
End Property
<Category("Behavior"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerDefaultProperty)>
Public Property HeaderTemplate As String
Private _Classes As String = "table table-stripped table-condensed"
Public Property Classes As String
Get
Return _Classes
End Get
Set(value As String)
_Classes = value
End Set
End Property
End Class
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment