AspNetPager
- 添加引用AspNetPager.dll
- 工具箱中添加"选择项"-.Net Framework组件-AspNetPager
- 页面中添加AspNetPager控件
Code
1<webdiyer:AspNetPager ID="AspNetPager1" runat="server"
2AlwaysShow="True" //总是显示分页控件,即使要分页的数据只有一页
3 OnPageChanged="AspNetPager1_PageChanged" //分页发生改变时触发事件
4UrlPaging="true" //通过URL传递分页信息的方式来分页。如果设为true,禁用ViewState也能达到效果。如果设置为false,禁用了viewstate则无法实现分页.
5NumericButtonTextFormatString="[{0}]" //页索引数字显示的格式
6 ShowCustomInfoSection="Left"> //显示当前页和总页数信息,默认值不显示,为left则将显示在页索引前,为right则为页索引后 </webdiyer:AspNetPager> - 初始化页面,添加ChangePage事件
Code
1 protected void Page_Load(object sender, EventArgs e)
2 {
3 .
4 .
5 .
6 BindData();//数据绑定
7 .
8 .
9 .
10 }
11
12//翻页事件
13 protected void ChangePage(object src, PageChangedEventArgs e)
14 {
15 pager1.CurrentPageIndex = e.NewPageIndex;
16 BindData();
17 }
//此处为调用分页存储过程
DataSet ds = DbUtility.QueryPagerData("jc_Province", "Id", pageIndex, PageSize, "", OrderBy, Where, out ItemCount, out PageCount);
base.DataBind(pageIndex);
PROC
1CREATE PROC sp_PageView
2 @tbname sysname, --要分页显示的表名
3 @FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
4 @PageCurrent int=1, --要显示的页码
5 @PageSize int=10, --每页的大小(记录数)
6 @FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
7 @FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC,用于指定排序顺序
8 @Where nvarchar(1000)='', --查询条件
9 @ItemCount int OUTPUT,
10 @PageCount int OUTPUT --总页数
11 AS
12 SET NOCOUNT ON
13 --检查对象是否有效
14 IF OBJECT_ID(@tbname) IS NULL
15 BEGIN
16 RAISERROR(N'对象"%s"不存在',1,16,@tbname)
17 RETURN
18 END
19 IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
20 AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
21 AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
22 BEGIN
23 RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
24 RETURN
25 END
26 --分页字段检查
27 IF ISNULL(@FieldKey,N'')=''
28 BEGIN
29 RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
30 RETURN
31 END
32 --其他参数检查及规范
33 IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
34 IF ISNULL(@PageSize,0)<1 SET @PageSize=10
35 IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
36 IF ISNULL(@FieldOrder,N'')=N''
37 SET @FieldOrder=N''
38 ELSE
39 SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
40 IF ISNULL(@Where,N'')=N''
41 SET @Where=N''
42 ELSE
43 SET @Where=N'WHERE ('+@Where+N')'
44 --如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
45
46 DECLARE @sql nvarchar(4000)
47 SET @sql=N'SELECT @ItemCount=COUNT(*)'
48 +N' FROM '+@tbname
49 +N' '+@Where
50 EXEC sp_executesql @sql,N'@ItemCount int OUTPUT',@ItemCount OUTPUT
51 SET @PageCount=(@ItemCount+@PageSize-1)/@PageSize
52
53 print @PageCount
54 print @ItemCount
55 --计算分页显示的TOPN值
56 DECLARE @TopN varchar(20),@TopN1 varchar(20)
57 SELECT @TopN=@PageSize,
58 @TopN1=(@PageCurrent-1)*@PageSize
59 --第一页直接显示
60 IF @PageCurrent=1
61 EXEC(N'SELECT TOP '+@TopN
62 +N' '+@FieldShow
63 +N' FROM '+@tbname
64 +N' '+@Where
65 +N' '+@FieldOrder)
66 ELSE
67 BEGIN
68 --处理别名
69 IF @FieldShow=N'*'
70 SET @FieldShow=N'a.*'
71 --生成主键(惟一键)处理条件
72 DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),
73 @s nvarchar(1000),@Field sysname
74 SELECT @Where1=N'',@Where2=N'',@s=@FieldKey
75 WHILE CHARINDEX(N',',@s)>0
76 SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
77 @s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
78 @Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
79 @Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
80 --@Where=REPLACE(@Where,@Field,N'a.'+@Field),
81 @FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
82 @FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
83 SELECT --@Where=REPLACE(@Where,@s,N'a.'+@s),
84 @FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
85 @FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),
86 @Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),
87 @Where2=CASE
88 WHEN @Where='' THEN N'WHERE ('
89 ELSE @Where+N' AND ('
90 END+N'b.'+@s+N' IS NULL'+@Where2+N')'
91 DECLARE @QUERYSTRING varchar(2000)
92 SET @QUERYSTRING = N'SELECT TOP '+@TopN
93 +N' '+@FieldShow
94 +N' FROM '+@tbname
95 +N' a LEFT JOIN(SELECT TOP '+@TopN1
96 +N' '+@FieldKey
97 +N' FROM '+@tbname
98 +N' a '+@Where
99 +N' '+@FieldOrder
100 +N')b ON '+@Where1
101 +N' '+@Where2
102 +N' '+@FieldOrder
103 PRINT @QUERYSTRING
104 --执行查询
105 EXEC(@QUERYSTRING)
106
107
108END
109GO
110
1CREATE PROC sp_PageView
2 @tbname sysname, --要分页显示的表名
3 @FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
4 @PageCurrent int=1, --要显示的页码
5 @PageSize int=10, --每页的大小(记录数)
6 @FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
7 @FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC,用于指定排序顺序
8 @Where nvarchar(1000)='', --查询条件
9 @ItemCount int OUTPUT,
10 @PageCount int OUTPUT --总页数
11 AS
12 SET NOCOUNT ON
13 --检查对象是否有效
14 IF OBJECT_ID(@tbname) IS NULL
15 BEGIN
16 RAISERROR(N'对象"%s"不存在',1,16,@tbname)
17 RETURN
18 END
19 IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
20 AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
21 AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
22 BEGIN
23 RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
24 RETURN
25 END
26 --分页字段检查
27 IF ISNULL(@FieldKey,N'')=''
28 BEGIN
29 RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
30 RETURN
31 END
32 --其他参数检查及规范
33 IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
34 IF ISNULL(@PageSize,0)<1 SET @PageSize=10
35 IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
36 IF ISNULL(@FieldOrder,N'')=N''
37 SET @FieldOrder=N''
38 ELSE
39 SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
40 IF ISNULL(@Where,N'')=N''
41 SET @Where=N''
42 ELSE
43 SET @Where=N'WHERE ('+@Where+N')'
44 --如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
45
46 DECLARE @sql nvarchar(4000)
47 SET @sql=N'SELECT @ItemCount=COUNT(*)'
48 +N' FROM '+@tbname
49 +N' '+@Where
50 EXEC sp_executesql @sql,N'@ItemCount int OUTPUT',@ItemCount OUTPUT
51 SET @PageCount=(@ItemCount+@PageSize-1)/@PageSize
52
53 print @PageCount
54 print @ItemCount
55 --计算分页显示的TOPN值
56 DECLARE @TopN varchar(20),@TopN1 varchar(20)
57 SELECT @TopN=@PageSize,
58 @TopN1=(@PageCurrent-1)*@PageSize
59 --第一页直接显示
60 IF @PageCurrent=1
61 EXEC(N'SELECT TOP '+@TopN
62 +N' '+@FieldShow
63 +N' FROM '+@tbname
64 +N' '+@Where
65 +N' '+@FieldOrder)
66 ELSE
67 BEGIN
68 --处理别名
69 IF @FieldShow=N'*'
70 SET @FieldShow=N'a.*'
71 --生成主键(惟一键)处理条件
72 DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),
73 @s nvarchar(1000),@Field sysname
74 SELECT @Where1=N'',@Where2=N'',@s=@FieldKey
75 WHILE CHARINDEX(N',',@s)>0
76 SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
77 @s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
78 @Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
79 @Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
80 --@Where=REPLACE(@Where,@Field,N'a.'+@Field),
81 @FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
82 @FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
83 SELECT --@Where=REPLACE(@Where,@s,N'a.'+@s),
84 @FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
85 @FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),
86 @Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),
87 @Where2=CASE
88 WHEN @Where='' THEN N'WHERE ('
89 ELSE @Where+N' AND ('
90 END+N'b.'+@s+N' IS NULL'+@Where2+N')'
91 DECLARE @QUERYSTRING varchar(2000)
92 SET @QUERYSTRING = N'SELECT TOP '+@TopN
93 +N' '+@FieldShow
94 +N' FROM '+@tbname
95 +N' a LEFT JOIN(SELECT TOP '+@TopN1
96 +N' '+@FieldKey
97 +N' FROM '+@tbname
98 +N' a '+@Where
99 +N' '+@FieldOrder
100 +N')b ON '+@Where1
101 +N' '+@Where2
102 +N' '+@FieldOrder
103 PRINT @QUERYSTRING
104 --执行查询
105 EXEC(@QUERYSTRING)
106
107
108END
109GO
110