Repeater分页无忧(内含分页控件源码)
随着技术的成长,从原来的GridView的使用,进步到使用Repeater,但是Repeater却没有相应的分页功能,需要我们自定义一个Repeater分页控件,虽然网上已有多款分页控件,不过今天仍与大家分享来自洒家的一款分页控件。
废话少说,简单介绍一下控件的功能:
支持数字分页
支持分页下拉框
支持输入跳转分页
同一个页面支持多个分页。
支持默认、中文、英文等模式使用。
内含漂亮且简洁的Css样式。
可自定义Css样式。
更多特点由你来发现。
支持分页下拉框
支持输入跳转分页
同一个页面支持多个分页。
支持默认、中文、英文等模式使用。
内含漂亮且简洁的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 - 英语)
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)
PageIndex //当前页码(int)
PageTotal //总页数(int:只读)
Records //总记录数(int)
二、分页控件的方法:
void SetPage(int records);
------ 函数说明 ------
功能:初始化分页控件
参数: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 通用数据层框架