适用于ASP.NET的自定义分页控件
2009-05-07 10:46
344 查看
前段时间的项目中需要使用到分页控件,在网上找了不少,最终还是自己动手写一个,比较简单,后续功能以后再实现,现把代码及思路写下来,望大家批评指正。分页控件的分页形式大多分三种,一种是用URL传值,通过给页面指定QueryString传值当前页的索引;另一种类似于GridView里面的分页方式,通过改变内部的PageIndex分页;还有一种是两种方式都包含,那样功能比较强大,在此不做评论。用URL传值的方式,相当于每点击分页按钮,页面就跳转至一个新的页面,那么页面IsPostBack值每次都是False,如果页面上不需要输入查询条件,那当然是没有问题的,如果查询页面上面要输入一些查询条件,自然用URL传值就不太适用了,至少你得把你输入的查询条件传递到新的URL中。故此,我在做这个控件时用到了用PageIndex传值的方式。首先我用了一个分页的存储过程,代码如下:
create procedure sp_PageList
2@sqlstr nvarchar(4000), --查询字符串
3@currentpage int, --第N页
4@pagesize int --每页行数
5
6as
7set nocount on
8declare @P1 int, --P1是游标的id
9 @rowcount int
10exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
11set @currentpage=(@currentpage-1)*@pagesize+1
12exec sp_cursorfetch @P1,16,@currentpage,@pagesize
13exec sp_cursorclose @P1
14select @rowcount
15set nocount off
16
17GO
18
这个存储过程的执行结果包括三个表,第一个为空表,第二个是查询的结果集,显示的行数为@pagesize设置的大小,第三个是总记录数
下面是分页控件的代码:
using System;
2using System.ComponentModel;
3using System.Text;
4using System.Web;
5using System.Web.UI;
6using System.Web.UI.WebControls;
7
8namespace WebControlEx
9
代码不用多解释,当页数为1时,无任何输出,记录为零时,显示无相关记录的提示,其它情况下输出一个Div 和一个Table,Div是为了样式控制方便而输出的。
下面是用C#代码调用上面分页存储过程的示例
public void BindGrid()
{
int recordCount =0;
GridView1.DataSource = this.GetLog(Pager1.PageIndex + 1, Pager1.PageSize,out recordCount);
GridView1.DataBind();
Pager1.RecordCount = recordCount;
}
/// <summary>
/// 分页控件的分页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Pager1_PageIndexChanged(object sender, EventArgs e)
{
this.BindGrid();
}
至此,该控件从编码到测试就完成了,测试的代码需要大家根据实际环境去调正一下才能运行,总结一下,这个分页控件对数据源、数据绑定控件都不关心,它要做的是传递给数据源当前页的索引值,分页大小,然后接受数据源传递过来的总记录数,至于数据绑定控件,GridView,DataList,Repeater都可以使用这个分页控件。
create procedure sp_PageList
2@sqlstr nvarchar(4000), --查询字符串
3@currentpage int, --第N页
4@pagesize int --每页行数
5
6as
7set nocount on
8declare @P1 int, --P1是游标的id
9 @rowcount int
10exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
11set @currentpage=(@currentpage-1)*@pagesize+1
12exec sp_cursorfetch @P1,16,@currentpage,@pagesize
13exec sp_cursorclose @P1
14select @rowcount
15set nocount off
16
17GO
18
这个存储过程的执行结果包括三个表,第一个为空表,第二个是查询的结果集,显示的行数为@pagesize设置的大小,第三个是总记录数
下面是分页控件的代码:
using System;
2using System.ComponentModel;
3using System.Text;
4using System.Web;
5using System.Web.UI;
6using System.Web.UI.WebControls;
7
8namespace WebControlEx
9
代码不用多解释,当页数为1时,无任何输出,记录为零时,显示无相关记录的提示,其它情况下输出一个Div 和一个Table,Div是为了样式控制方便而输出的。
下面是用C#代码调用上面分页存储过程的示例
public void BindGrid()
{
int recordCount =0;
GridView1.DataSource = this.GetLog(Pager1.PageIndex + 1, Pager1.PageSize,out recordCount);
GridView1.DataBind();
Pager1.RecordCount = recordCount;
}
/// <summary>
/// 分页控件的分页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Pager1_PageIndexChanged(object sender, EventArgs e)
{
this.BindGrid();
}
至此,该控件从编码到测试就完成了,测试的代码需要大家根据实际环境去调正一下才能运行,总结一下,这个分页控件对数据源、数据绑定控件都不关心,它要做的是传递给数据源当前页的索引值,分页大小,然后接受数据源传递过来的总记录数,至于数据绑定控件,GridView,DataList,Repeater都可以使用这个分页控件。
相关文章推荐
- [原]asp.net自定义分页用户控件
- asp.net自定义分页控件示例
- 菜鸟也封装之asp.net自定义双样式分页控件.
- ASP.NET技巧:GridView控件自定义分页详解第一页
- ASP.NET 数据列表控件的分页总结(一)-----自定义方法分页和PageDataSource类分页(转)
- asp.net web页面自定义分页控件
- ASP.NET分页存储过程自定义用户控件
- asp.net webform自定义分页控件
- ASP.NET技巧:GridView控件自定义分页详解第二页
- asp.net自定义分页控件
- ASP.NET用户自定义分页控件
- ASP.NET技巧:GridView控件自定义分页详解第三页
- asp.net web页面自定义分页控件使用详解
- 关于asp.net 自定义分页控件
- 简单的自定义分页控件实现(Asp.net)
- ASP.NET分页存储过程自定义用户控件
- Asp.Net自定义分页控件(前台/后台)有图
- ASP.NET技巧:GridView控件自定义分页详解
- asp.net自定义分页控件示例
- 我学习的自定义ASP.NET分页控件