📄 customrepeater.vb
字号:
Imports System
Imports System.Collections '因为用到模板,所以要导入以下两个名称空间
Imports System.Collections.Specialized
Imports System.Web.UI
Imports System.Web.UI.WebControls '因为继承自Repeater控件,所以要导入
Namespace nsASPNETCase '这是自定义名称空间的名字
'该类继承自Repeater控件,并且实现IPostBackEventHandler接口,主要为了实现JavaScript回传
Public Class CustomRepeater : Inherits Repeater : Implements IPostBackEventHandler
'以下定义4个私有变量,分别用来保存数据源、每页显示记录数、当前显示页、总页数
Private _DataSource As Object
Private _PageSize As Integer = 10
Private _CurrentPageIndex As Integer
Private _PageCount As Integer
'下面定义一个只写属性,用来设置数据源
Public Shadows WriteOnly Property DataSource() As Object
Set
'这里利用PagedDataSource实现分页
Dim pgds As New PagedDataSource
pgds.DataSource = CType(Value, IList) '接受外部数据源,并转换为IList类型
pgds.AllowPaging = True '设置允许分页
pgds.PageSize = _PageSize '设置每页显示条数
pgds.CurrentPageIndex = _CurrentPageIndex '设置当前显示第几页
_PageCount = pgds.PageCount '返回总共有多少页
_DataSource = pgds '将分好页的数据源保存到私有变量中
End Set
End Property
'该属性用来获取或设置每页显示条数
Public Property PageSize() As Integer
Get
Return _PageSize '返回属性值
End Get
Set
_PageSize = Value '将属性值保存到私有变量中
End Set
End Property
'该属性用来获取总页数
Public ReadOnly Property PageCount() As Integer
Get
Return _PageCount '返回属性值
End Get
End Property
'该属性用来获取或设置当前显示第几页
Public Overridable Property CurrentPageIndex() As Integer
Get
Return _CurrentPageIndex '返回属性值
End Get
Set
_CurrentPageIndex = Value '将属性值保存到私有变量中
End Set
End Property
'重写Render方法,在页面上显示内容
Protected Overloads Overrides Sub Render(htw As HtmlTextWriter)
'首先显示Repeater控件原有的HTML内容
MyBase.Render(htw)
'下面输出当前显示页数和总页数的信息
htw.Write("<p align=right>")
htw.Write((_CurrentPageIndex+1) & "/" & (_PageCount) & " ")
'以下将会输出“首页、上一页、下一页和尾页”的超链接
Dim pfirst As String
Dim pprev As String
Dim pnext As string
Dim plast As String
'根据当前显示页和总页数的值设置超链接要返回的参数,
'它们其实是对应的数字,只不过这里当作字符串处理了
pfirst="0"
if _CurrentPageIndex<=0 Then
pprev="0"
Else
pprev=(_CurrentPageIndex-1).ToString
End If
if _CurrentPageIndex>=_PageCount-1 Then
pnext=(_PageCount-1).ToString
Else
pnext=(_CurrentPageIndex+1).ToString
End If
plast=(_PageCount-1).ToString
'输出各个超链接,注意其中的参数pfirst、pprev、pnext和plast
htw.AddAttribute(HtmlTextWriterAttribute.Href, Me.Page.GetPostBackClientHyperlink(Me, pfirst))
htw.RenderBeginTag(HtmlTextWriterTag.A) '开始一个标记
htw.Write("首页")
htw.RenderEndTag '结束一个标记
htw.Write(" ") '输出一个空格
htw.AddAttribute(HtmlTextWriterAttribute.Href, Me.Page.GetPostBackClientHyperlink(Me, pprev))
htw.RenderBeginTag(HtmlTextWriterTag.A)
htw.Write("上一页")
htw.RenderEndTag
htw.Write(" ")
htw.AddAttribute(HtmlTextWriterAttribute.Href, Me.Page.GetPostBackClientHyperlink(Me, pnext))
htw.RenderBeginTag(HtmlTextWriterTag.A)
htw.Write("下一页")
htw.RenderEndTag
htw.Write(" ")
htw.AddAttribute(HtmlTextWriterAttribute.Href, Me.Page.GetPostBackClientHyperlink(Me, plast))
htw.RenderBeginTag(HtmlTextWriterTag.A)
htw.Write("尾页")
htw.RenderEndTag
htw.Write("</p>")
End Sub
'重写OnDataBinding方法,用于绑定数据
Protected Overloads Overrides Sub OnDataBinding(ByVal e As EventArgs)
'注意这里首先将分好页的数据源赋值给基类的DataSource属性,然后调用基类的OnDataBinding方法。
MyBase.DataSource = _DataSource
MyBase.OnDataBinding(e)
End Sub
'下面定义了一个PageIndexChanged事件,它其实使用了DataGrid的分页事件
'当触发该事件时,就会返回一个客户要显示的数据页
Public Event PageIndexChanged As DataGridPageChangedEventHandler
Protected Overridable Sub OnPageIndexChanged(ByVal e As DataGridPageChangedEventArgs)
RaiseEvent PageIndexChanged(Me, e)
End Sub
'这里是实现一个客户端JavaScript回发,当用户单击上面的超链接时,
'就会触发上面定义的PageIndexChanged事件,并将对应的数据页参数传递过去
Public Sub RaisePostBackEvent(EventArgument As String) Implements IPostBackEventHandler.RaisePostBackEvent
Dim PageIndex As Integer= EventArgument
OnPageIndexChanged(New DataGridPageChangedEventArgs(Nothing, PageIndex))
End Sub
End Class
End Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -