AspNetPager 用法
- 添加引用AspNetPager.dll
- 工具箱中添加"选择项"-.Net Framework组件-AspNetPager
- 页面中添加AspNetPager控件

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事件

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);
1
CREATE PROC sp_PageView2
@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
AS12
SET NOCOUNT ON13
--检查对象是否有效14
IF OBJECT_ID(@tbname) IS NULL15
BEGIN16
RAISERROR(N'对象"%s"不存在',1,16,@tbname)17
RETURN18
END19
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=020
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=021
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=022
BEGIN23
RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)24
RETURN25
END26
--分页字段检查27
IF ISNULL(@FieldKey,N'')=''28
BEGIN29
RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)30
RETURN31
END32
--其他参数检查及规范33
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=134
IF ISNULL(@PageSize,0)<1 SET @PageSize=1035
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'36
IF ISNULL(@FieldOrder,N'')=N''37
SET @FieldOrder=N''38
ELSE39
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)40
IF ISNULL(@Where,N'')=N''41
SET @Where=N''42
ELSE43
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 '+@tbname49
+N' '+@Where50
EXEC sp_executesql @sql,N'@ItemCount int OUTPUT',@ItemCount OUTPUT51
SET @PageCount=(@ItemCount+@PageSize-1)/@PageSize52
53
print @PageCount54
print @ItemCount55
--计算分页显示的TOPN值56
DECLARE @TopN varchar(20),@TopN1 varchar(20)57
SELECT @TopN=@PageSize,58
@TopN1=(@PageCurrent-1)*@PageSize59
--第一页直接显示60
IF @PageCurrent=161
EXEC(N'SELECT TOP '+@TopN62
+N' '+@FieldShow63
+N' FROM '+@tbname64
+N' '+@Where65
+N' '+@FieldOrder)66
ELSE67
BEGIN68
--处理别名69
IF @FieldShow=N'*'70
SET @FieldShow=N'a.*'71
--生成主键(惟一键)处理条件72
DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),73
@s nvarchar(1000),@Field sysname74
SELECT @Where1=N'',@Where2=N'',@s=@FieldKey75
WHILE CHARINDEX(N',',@s)>076
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=CASE88
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 '+@TopN93
+N' '+@FieldShow94
+N' FROM '+@tbname95
+N' a LEFT JOIN(SELECT TOP '+@TopN196
+N' '+@FieldKey97
+N' FROM '+@tbname98
+N' a '+@Where99
+N' '+@FieldOrder100
+N')b ON '+@Where1101
+N' '+@Where2102
+N' '+@FieldOrder103
PRINT @QUERYSTRING 104
--执行查询105
EXEC(@QUERYSTRING)106

107

108
END109
GO110


浙公网安备 33010602011771号