随着技术的成长,从原来的GridView的使用,进步到使用Repeater,但是Repeater却没有相应的分页功能,需要我们自定义一个Repeater分页控件,虽然网上已有多款分页控件,不过今天仍与大家分享来自洒家的一款分页控件

废话少说,简单介绍一下控件的功能:

支持数字分页
支持分页下拉框
支持输入跳转分页
同一个页面支持多个分页。
支持默认、中文、英文等模式使用。
内含漂亮且简洁的Css样式。
可自定义Css样式。
更多特点由你来发现。



一、分页控件的属性:

1:可显示设置属性

 ID  //分页控件ID(同页内必须唯一) (string)
 CssClass     // Css样式    (string)
 ShowPreNext    //是否显示上一页下一页  (bool)
 ShowPageNum    //是否显示页码连接  (bool)
 PageSplitNum    //页码隔多少数字 (int:当ShowPageNum属性为true时生效)
 ShowPageTips   //是否显示当前页、记录数等信息 (bool)
 ShowPageJump   //是否显示下来框跳转  (bool)
 ShowPageGo     //是否显示输入页码跳转  (bool)
 ShowPageLan //显示语言的类型  (int: 0 - 默认, 1 - 中文, 2 - 英语)

2:不可显示设置属性

 PageSize    //每页记录数(int)
 PageIndex   //当前页码(int)
 PageTotal   //总页数(int:只读)
 Records     //总记录数(int)

二、分页控件的方法:

 void SetPage(int records);
 ------ 函数说明 ------
 功能:初始化分页控件
 参数:records - 总记录数
 输出:无


三、控件使用说明:

1. 引用控件到项目中

把控件Ling.Pager.dll引入到项目中,也就是直接复制这个dll到站点的bin目录下。

2. 前台Aspx加入控件Page1

在前台aspx顶部加入代码:

<%@ Register Assembly="Ling.Pager" Namespace="Ling.Pager" TagPrefix="cc1" %>

接着在前台aspx页面需要插入分页条的位置(如Repeater)插入代码:

 1     <asp:Repeater ID="repList" runat="server">
2 <HeaderTemplate>
3 <table id="FLTable">
4 <tr>
5 <th>
6 ID
7 </th>
8 <th>
9 方案名称
10 </th>
11 <th>
12 描述
13 </th>
14 <th>
15 创建人
16 </th>
17 <th>
18 创建时间
19 </th>
20 </tr>
21 </HeaderTemplate>
22 <ItemTemplate>
23 <tr>
24 <td>
25 <%#Eval("SlnID")%>
26 </td>
27 <td>
28 <%#Eval("SlnName")%>
29 </td>
30 <td>
31 <%#Eval("Desc")%>
32 </td>
33 <td>
34 <%#Eval("Creater")%>
35 </td>
36 <td>
37 <%#Eval("CreateTime","{0:yyyy-MM-dd:HH:mm:ss}")%>
38 </td>
39 </tr>
40 </ItemTemplate>
41 <FooterTemplate>
42 </table>
43 </FooterTemplate>
44 </asp:Repeater>
45
46
47 <cc1:pager id="Pager1" runat="server">
48 </cc1:pager>

这样我们就把整个控件加入进去了。

3.后台绑定数据源及初始化控件

 编写一个读取分页数据函数,例如(里面读取和分页过程略):

public DataTable GetDataList(int  pageSize, int  pageIndex, out int records)
{
DataTable dt;
//返回的数据集
//.... //(从数据库读取数据省略)
records = ...; //赋值给总记录数(省略)
return dt;
}

至于如何读取分页数据,建议用存储过程进行分页,给出一个支持多表查询(Left join等)的存储过程分页:

分页存储过程SQL
 1 -- =============================================
2 -- Author: 佚名(来自网上)
3 -- Description: 存储过程分页
4 -- 调用:(排序ASC不可少)
5 -- exec SP_Page ''select * from [order] '', 20, 0, ''CreateTime ASC, Money DESC''
6 -- =============================================
7 CREATE PROCEDURE [dbo].[SP_Page]
8 (
9 @SQL nvarchar(1024), --查询语句
10 @Sort nvarchar(100) = '''', --排序字段
11 @PageSize int = 20, --分页大小
12 @PageIndex int = 1, --分页索引
13 @TotalCount int = 0 output --总数
14 )
15 AS
16
17 -- 值默认值
18 if (IsNUll(@PageSize,0)=0)
19 Set @PageSize=20
20 if (IsNull(@PageIndex,0)=0)
21 Set @PageIndex=1
22
23 set nocount on
24 /*声明查询字符串*/
25 declare @strSQL nvarchar(4000)
26
27 set @strSQL = '' select @TotalCount=count(*) from (''+@SQL+'') as t ''
28
29 /*取得查询结果总数*/
30 exec sp_executesql
31 @strSQL,
32 N''@TotalCount int=0 OUTPUT'',
33 @TotalCount=@TotalCount OUTPUT
34
35 declare @ItemCount int
36 declare @_PageIndex int
37
38 set @_PageIndex = @PageIndex; --索引从1开始
39 --set @_PageIndex = @PageIndex + 1; --索引从0开始
40
41 /*确定搜索边界*/
42 set @ItemCount = @TotalCount - @PageSize * @_PageIndex
43
44 if(@ItemCount < 0)
45 set @ItemCount = @ItemCount + @PageSize
46 else
47 set @ItemCount = @PageSize
48
49 if(@ItemCount < 0) return 1
50
51 if(@Sort != '''')
52 begin
53 /*声明排序变量*/
54 declare @IndexSort1 nvarchar(50), @IndexSort2 nvarchar(50), @Sort1 nvarchar(50), @Sort2 nvarchar(50)
55
56 SET @Sort1 = @Sort
57 SET @Sort2 = Replace(Replace(Replace(@Sort, ''DESC'', ''@SORT''), ''ASC'', ''DESC''), ''@SORT'', ''ASC'')
58
59 set @strSQL = ''SELECT * FROM
60 (SELECT TOP '' + STR(@ItemCount) + '' * FROM
61 (SELECT TOP '' + STR(@PageSize * @_PageIndex) + '' * FROM
62 (''+@SQL+'') AS t0
63 ORDER BY ''+@Sort1 +'') AS t1
64 ORDER BY ''+@Sort2 +'') AS t2
65 ORDER BY '' +@Sort
66 end
67 else
68 begin
69 set @strSQL = ''SELECT * FROM
70 (SELECT TOP '' + STR(@ItemCount) + '' * FROM
71 (SELECT TOP '' + STR(@PageSize * @_PageIndex) + '' * FROM
72 (''+@SQL+'') As t0)
73 aS t1)
74 AS t2''
75 end
76
77 exec sp_executesql
78 @strSQL

 

后台aspx.cs页面绑定Repeater数据源、初始化控件:

1 int records = 0;   //定义输出全部记录数变量
2 repList.DataSource = GetDataList(Pager1.PageSize, Pager1.PageIndex, out records); //获取数据源
3 repList.DataBind(); //绑定数据

4 Pager1.SetPage(totalCount); //初始化分页,总记录数作为参数传入。

 

Repeater分页控件源码下载:点击这里下载

 

作者: Foolin

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"