使用PagedDataSource给Repeater、DataList增加分页

Repeater和DataList是数据库中常用的数据显示控件,它们和DataGrid相比较因为没有分页等复杂的功能,因此性能高,同时Repeater自定义模板又给我们带来了很大的灵活性。但是Repeater和DataList没有分页功能,有时很不方便。目前有很多增加分页的方法,包括使用存储过程来控制每页的数据读取,这些分页制作起来都很麻烦,下面介绍一种使用PagedDataSource给Repeater、DataList增加分页的方法。

PagedDataSource类封装了DataGrid控件的属性,从而使DataGrid控件可以执行分页,它就是一个数据的容器,我们先把数据从数据库中读取出来放在这个容器中,然后设置容器的属性取出当前要显示的页上的部分数据,然后将此部分数据再绑定到页面上的显示控件上。我们同样可以将它用在Repeater和DataList中,下面给出一个实例帮助大家理解如何使用PagedDataSource类。
页面显示元素如下:
dd.gif
后台代码如下:

 1 ExpandedBlockStart.gif ContractedBlock.gif Private   Sub Page_Load() Sub Page_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
 2InBlock.gif        '建立数据库连接,获取数据
 3InBlock.gif        Dim sqlconn As New SqlConnection(ConfigurationSettings.AppSettings.Get("sqlserver"))
 4InBlock.gif        sqlconn.Open()
 5InBlock.gif        Dim sqlda As New SqlDataAdapter("select * from vote_items", sqlconn)
 6InBlock.gif        Dim dt As New DataTable
 7InBlock.gif        sqlda.Fill(dt)
 8InBlock.gif        sqlda.Dispose()
 9InBlock.gif
10InBlock.gif        '将数据设置为PagedDataSource的数据源,并设置相关参数
11InBlock.gif        Dim pds As New PagedDataSource
12InBlock.gif        '注意和其它控件DataSource不同的是,这里不能直接写dt,因为PagedDataSource.DataSource实现了IEnumerable
13InBlock.gif        '接口,而DataTable没有实现此接口,只有DataView实现了此接口
14InBlock.gif        pds.DataSource = dt.DefaultView
15InBlock.gif        '==================================================
16InBlock.gif        pds.AllowPaging = True
17InBlock.gif        pds.PageSize = 3 '每页显示的项目数
18InBlock.gif
19InBlock.gif        '从URL参数中获取page页码参数
20InBlock.gif        Dim currentpage As Integer
21InBlock.gif        If Request.QueryString.Get("page"<> Nothing Then
22InBlock.gif            currentpage = Convert.ToInt32(Request.QueryString("Page"))
23InBlock.gif        Else
24InBlock.gif            currentpage = 1
25InBlock.gif        End If
26InBlock.gif        '设置当前要显示的数据页
27InBlock.gif        pds.CurrentPageIndex = currentpage - 1
28InBlock.gif
29InBlock.gif        Label1.Text = "共有记录" & pds.DataSourceCount & "条,分" & pds.PageCount & "页显示,每页显示" & _
30InBlock.gif        pds.PageSize & "条,当前为第" & currentpage & "页:"
31InBlock.gif
32InBlock.gif        '根据首页和尾页控制链接的显示
33InBlock.gif        If Not pds.IsFirstPage Then
34InBlock.gif            lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath & "?Page=" & Convert.ToInt32(currentpage - 1)
35InBlock.gif            lnkFirst.NavigateUrl = Request.CurrentExecutionFilePath & "?Page=1"
36InBlock.gif        End If
37InBlock.gif
38InBlock.gif        If Not pds.IsLastPage Then
39InBlock.gif            lnkNext.NavigateUrl = Request.CurrentExecutionFilePath & "?Page=" & Convert.ToInt32(currentpage + 1)
40InBlock.gif            lnkLast.NavigateUrl = Request.CurrentExecutionFilePath & "?Page=" & pds.PageCount
41InBlock.gif        End If
42InBlock.gif
43InBlock.gif        '将PagedDataSource绑定到Repeater
44InBlock.gif        rp.DataSource = pds
45InBlock.gif        rp.DataBind()
46ExpandedBlockEnd.gif    End Sub

事实上,功能还有很多可以改进的地方,例如将使用链接控制页数换成使用按钮来控制,这里就不多说了,大家可以自己研究一下。

转载于:https://www.cnblogs.com/jailu/archive/2007/01/18/623412.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值