65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.36/5 (10投票s)

2008年8月7日

LGPL3

3分钟阅读

viewsIcon

70741

downloadIcon

1513

一个基本的 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:当前页面的编号; 当单击第一个/最后一个/上一个/下一个链接时,此值会自动递增/递减

关注点

目前,分页器主要只是一个用户控件,主要是因为没有足够的时间将其捆绑到一个库中,但这将来可能会改变。

PreviousNext 链接之间的编号链接将以 CurrentPageNumber 为中心生成。 因此,如果您已将 NumberOfPages 设置为 21,并将 CurrentPageNumber 设置为 30,则它将显示 20...30...40

以下是控件外观的一个示例

Pager.jpg

历史

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