一个基本的 ASP.NET 分页控件






4.36/5 (10投票s)
一个基本的 ASP.NET 分页用户控件
引言
此控件提供了一种向 ASP.NET 站点添加分页功能的简单方法。 该控件本身没有“附加”到任何数据源; 相反,这由您(开发人员)来处理。
背景
我目前在英国米德尔斯堡的一家 Web 开发公司 (Thap) 工作,并且正在做一个需要在多个部分进行分页的项目。 该项目使用 Repeater
来显示分页器将与之一起使用的数据,但在未能成功搜索到满足项目要求的现有控件后,我决定自己构建一个分页控件。
Thap 慷慨地允许我根据 LGPL 许可证将代码发布到该站点上。
Using the Code
实现控件非常简单:要么将文件包含在您的项目中,要么复制并粘贴您需要的内容。
要将控件添加到页面,请在顶部包含以下行
<%@ Register Src="Pager.ascx" TagName="Pager" TagPrefix="userControl" %>
现在,添加此行
<userControl:Pager ID="Pager" runat="server" Separator=" | " FirstText="First"
PreviousText="<" NextText=">" LastText="Last" PageSize="2" NumberOfPages="3"
ShowGoTo="True" OnChange="Pager_Changed" />
以下是可以设置的属性列表
Separator
: 指定要在数字链接之间显示的string
FirstText
: 用于“第一个按钮”的String
。 默认为 "|<
"PreviousText
: 用于“上一个按钮”的String
。 默认为 "<
"NextText
: 用于“下一个按钮”的String
。 默认为 ">
"LastText
: 用于“最后一个按钮”的String
。 默认为 ">|
"PageSize
: 一个方便的地方来存储您的页面大小,在代码中未使用NumberOfPages
: 在上一个/下一个链接之间显示的页面链接数。ShowGoTo
: 显示GoTo
功能。
接下来要做的是通过侦听 OnChange
事件来处理代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
/*Either populate the data using one of the lines */
PopulateDataSource(1, this.Pager.PageSize);
/*OR*/
this.Page.GenerateLinks();
}
protected void Pager_Changed(object sender, PagerEventArgs e)
{
PopulateDataSource(e.Number, e.PageSize);
}
private void PopulateDataSource(int page, int pageSize)
{
// This bit is purely to have some data. usually this
// would be from a database/XML file etc.
var data = new List<String>();
for (int i = 0; i < 20; i++)
{
data.Add(i.ToString());
}
//Set the repeater with a "page" of data
this.RepeaterData.DataSource =
data.Skip((page - 1) * pageSize).Take(pageSize);
this.RepeaterData.DataBind();
//Calculates how many pages of a given size are required
this.Pager.TotalPages =
(data.Count / pageSize) + (data.Count % pageSize > 0 ? 1 : 0);
this.Pager.GenerateLinks();
}
Pager.TotalPages
: 正确显示数字链接所必需的Pager.GenerateLinks()
: 如果进行了更改(例如currentPageNumber
更改了(由您更改,或者在触发OnChange
事件时),请使用它来生成链接
提供的事件参数为
First
:一个布尔值,指示是否已单击“第一个链接”Previous
:一个布尔值,指示是否已单击“上一个链接”Next
:一个布尔值,指示是否已单击“下一个链接”Last
:一个布尔值,指示是否已单击“最后一个链接”PageSize
:您之前设置的页面大小CurrentPageNumber
:当前页面的编号; 当单击第一个/最后一个/上一个/下一个链接时,此值会自动递增/递减
关注点
目前,分页器主要只是一个用户控件,主要是因为没有足够的时间将其捆绑到一个库中,但这将来可能会改变。
Previous
和 Next
链接之间的编号链接将以 CurrentPageNumber
为中心生成。 因此,如果您已将 NumberOfPages
设置为 21
,并将 CurrentPageNumber
设置为 30
,则它将显示 20
...30
...40
。
以下是控件外观的一个示例

历史
- 2008 年 10 月 21 日
- 修复了代码中的一个小的非中断错误以及文章中的几个错误
- 2008 年 8 月 14 日
- 修复了 Ayyanar 指出的错误
- 添加了 Mojtaba Vali 请求的
GoTo
功能 - 添加了一个使用控件的示例页面
- 2008 年 8 月 7 日
- 首次发布