- 添加引用AspNetPager.dll
- 工具箱中添加"选择项"-.Net Framework组件-AspNetPager
- 页面中添加AspNetPager控件
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
<webdiyer:AspNetPager ID="AspNetPager1" runat="server"
2
AlwaysShow="True" //总是显示分页控件,即使要分页的数据只有一页
3
OnPageChanged="AspNetPager1_PageChanged" //分页发生改变时触发事件
4
UrlPaging="true" //通过URL传递分页信息的方式来分页。如果设为true,禁用ViewState也能达到效果。如果设置为false,禁用了viewstate则无法实现分页.
5
NumericButtonTextFormatString="[{0}]" //页索引数字显示的格式
6
ShowCustomInfoSection="Left"> //显示当前页和总页数信息,默认值不显示,为left则将显示在页索引前,为right则为页索引后 </webdiyer:AspNetPager>
- 初始化页面,添加ChangePage事件
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
protected void Page_Load(object sender, EventArgs e)
2![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
.
4
.
5
.
6
BindData();//数据绑定
7
.
8
.
9
.
10
}
11![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
//翻页事件
13
protected void ChangePage(object src, PageChangedEventArgs e)
14![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
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);
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
PROC
1
CREATE 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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
108
END
109
GO
110![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)