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

使用 C# 为 Repeater 和 DataList 启用分页

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (16投票s)

2009年8月27日

CPOL

2分钟阅读

viewsIcon

107989

downloadIcon

4511

一个 Web 用户控件,用于在 Repeater 和 DataList 控件中启用分页功能。

引言

RepeaterDataList 是两个非常重要的控件,许多开发者在他们的大部分网站或 Web 应用程序中都会至少使用其中一个。此外,这些控件对于 UI 开发者来说很容易使用,但它们的功能有限。Gridview 控件有一个非常有用的分页功能,但它是一个复杂的控件,您可能不想使用它。而且,如果您想使用 RepeaterDataList,它们不支持分页,那么您该怎么办呢?!!

我将向您展示如何创建一个允许分页的 RepeaterDataList。我还将创建一个 Web 用户控件,任何人都可以使用该控件在 RepeaterDataList 控件中启用分页。

如何决定使用 DataGrid、DataList 或 Repeater

下面的 URL 描述了 DataGridDataListRepeater 之间的区别,并有助于决定使用哪一个:http://msdn.microsoft.com/en-us/library/aa479015.aspx

AllowPaging 控件的优点

它可以在 RepeaterDataList 控件中启用分页。 这是一个易于使用的 Web 用户控件。 该控件依赖于 ObjectDataSource,因此,如果您想使用 SqlDataSource,只需将 ObjectDataSource 替换为 SqlDataSource

使用代码

示例代码分为三个部分

  1. 用于添加 RepeaterDataList 控件的默认页面
  2. 负责分页的 UCPager Web 用户控件。
  3. 用于从数据库获取数据的 GetData 类。

此外,我在此示例中使用了 Northwind 数据库。

首先,我将谈论用户控件示例代码。 有四个重要的属性

  • CurrentPage - 设置或获取当前页码
  • Ods - 将 ObjectDataSource 传递给它
  • ObjectControl - 传递一个 RepeaterDataList
  • PageSize - 传递一个整数,表示每页将显示多少条记录
/// <summary>
/// set or get the Current Page Number
/// </summary>
public int CurrentPage
{
    get
    {
        //get current page number
        object obj = this.ViewState["_CurrentPage"];
        if (obj == null)
        {
            return 0;
        }
        else
        {
            return (int)obj;
        }
    }
    set
    {
        //set in viewstate the current page number
        this.ViewState["_CurrentPage"] = value;
    }
}

/// <summary>
/// set or get ObjectDataSource that's use to bind the control
/// Like(Repeater or Datalist)
/// </summary>
public ObjectDataSource Ods { get; set; }

/// <summary>
/// set or get Control Name EX. (Repeater1 or Datalist1)
/// </summary>
public object ObjectControl { get; set; }

/// <summary>
/// set or get count of pages
/// page size determine how many records will appears in every page
/// </summary>
public int PageSize { get; set; }

下面的方法负责绑定一个控件,并根据记录的显示方式启用或禁用导航按钮。

/// <summary>
/// bind controls with data
/// enable and disable controls depending on page number
/// check for object Control if it a Repeater or a DataList
/// </summary>
/// <returns>the count of pages</returns>
private int GetItems()
{
    //create new instance of PagedDataSource
    PagedDataSource objPds = new PagedDataSource();
    //set number of pages will appear
    objPds.PageSize = PageSize;
    objPds.DataSource = Ods.Select();
    objPds.AllowPaging = true;
    int count = objPds.PageCount;
    objPds.CurrentPageIndex = CurrentPage;
    if (objPds.Count > 0)
    {
        //dispaly controls if there are pages
        btnPrevious.Visible = true;
        btnNext.Visible = true;
        btnLastRecord.Visible = true;
        btnFirstRecord.Visible = true;
        lblCurrentPage.Visible = true;
        lblCurrentPage.Text = "Page " + 
          Convert.ToString(CurrentPage + 1) + " of " + 
          Convert.ToString(objPds.PageCount);
    }
    else
    {
        //disable controls if there are no pages
        btnPrevious.Visible = false;
        btnNext.Visible = false;
        btnLastRecord.Visible = false;
        btnFirstRecord.Visible = false;
        lblCurrentPage.Visible = false;
    }
    btnPrevious.Enabled = !objPds.IsFirstPage;
    btnNext.Enabled = !objPds.IsLastPage;
    btnLastRecord.Enabled = !objPds.IsLastPage;
    btnFirstRecord.Enabled = !objPds.IsFirstPage;
    //check for object control if it a DataList
    //we will use DList Variable
    if (ObjectControl is DataList)
    {
        DList = (DataList)ObjectControl;
        DList.DataSource = objPds;
        DList.DataBind();
    }
    //check for object control if it a Repeater
    //we will use Rep Variable
    else if (ObjectControl is Repeater)
    {
        Rep = (Repeater)ObjectControl;
        Rep.DataSource = objPds;
        Rep.DataBind();
    }
    return count;
}

在第一个记录按钮中

//go to first Page
CurrentPage = 0;

GetItems();

在最后一个记录按钮中

//go to last page
CurrentPage = GetItems() -1;

GetItems();

在上一个记录按钮中

//back to previous page
CurrentPage -= 1;

GetItems();

在下一个记录按钮中

//go to next page
CurrentPage += 1;

GetItems();

在默认页面中,您所需要做的就是绑定 AllowPaging 控件属性,下面的代码解释了这一点

UCPager1.Ods = ObjEmployees;

UCPager1.ObjectControl = Repeater1;

UCPager1.PageSize = 1;

我正在等待您的评论。您可以在这里阅读我的博客:http://waleedelkot.blogspot.com/

关注点

此控件为我节省了大量时间,我希望它也能帮助您。

历史

  • 2009-08-27:发布第一个版本。
在 C# 中允许 Repeater 和 DataList 分页 - CodeProject - 代码之家
© . All rights reserved.