Repeater控制元件的分頁實現

Web開發者發表於2012-01-28

 

本文講解Repeater控制元件與PagedDataSource相結合實現其分頁功能。PagedDataSource 類封裝那些允許資料來源控制元件(如 DataGrid、GridView)執行分頁操作的屬性。如果控制元件開發人員需對自定義資料繫結控制元件提供分頁支援,即可使用此類。

PagedDataSource 類的部分公共屬性:

AllowCustomPaging // 獲取或設定指示是否啟用自定義分頁的值。
AllowPaging // 獲取或設定指示是否啟用分頁的值。
Count // 獲取要從資料來源使用的項數。
CurrentPageIndex // 獲取或設定當前頁的索引。
DataSource // 獲取或設定資料來源。
DataSourceCount // 獲取資料來源中的項數。
FirstIndexInPage // 獲取頁中的第一個索引。
IsCustomPagingEnabled // 獲取一個值,該值指示是否啟用自定義分頁。
IsFirstPage // 獲取一個值,該值指示當前頁是否是首頁。
IsLastPage // 獲取一個值,該值指示當前頁是否是最後一頁。
IsPagingEnabled // 獲取一個值,該值指示是否啟用分頁。
IsReadOnly // 獲取一個值,該值指示資料來源是否是隻讀的。
IsSynchronized // 獲取一個值,該值指示是否同步對資料來源的訪問(執行緒安全)。
PageCount // 獲取顯示資料來源中的所有項所需要的總頁數。
PageSize // 獲取或設定要在單頁上顯示的項數。
VirtualCount // 獲取或設定在使用自定義分頁時資料來源中的實際項數。

下面是PagedDataSource類實現Repeater控制元件的分頁顯示例子,如圖:

本例使用vs.net 2008(C#)編寫。後臺.CS程式碼。來自 admin10000.com

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
         int pageIndex = 1;
         try
         {
              pageIndex = Convert.ToInt32(Request.QueryString["Page"]);
              if (pageIndex <= 0) pageIndex = 1;
         }
         catch
         {
              pageIndex = 1;
         }
         DataTable dt = GetDocumentTable();
         PagedDataSource pds = new PagedDataSource(); 
         pds.DataSource = dt.DefaultView; // 設定資料來源
         pds.AllowPaging = true; // 設定指示是否啟用分頁的值
         pds.PageSize = 5; // 設定要在每頁顯示的數量
         pds.CurrentPageIndex = pageIndex - 1; // 設定當前頁的索引。
         rptDocumentList.DataSource = pds;
         rptDocumentList.DataBind();
         ltlPageBar.Text = GetPageBar(pds);
    }
}

// 分頁條
private string GetPageBar(PagedDataSource pds)
{
    string pageBar = string.Empty;
    int currentPageIndex = pds.CurrentPageIndex + 1;
    if (currentPageIndex == 1)
    {
          pageBar += "<a href=\"javascript:void(0)\">首頁</a>";
    }
    else
    {
          pageBar += "<a href=\"" + Request.CurrentExecutionFilePath + "?Page=1\">首頁</a>";
    }
    if ((currentPageIndex - 1) < 1)
    {
          pageBar += "<a href=\"javascript:void(0)\">上一頁</a>";
    }
    else
    {
          pageBar += "<a href=\"" + Request.CurrentExecutionFilePath + "?Page=" + (currentPageIndex - 1) + "\">上一頁</a>";
    }
    if ((currentPageIndex + 1) > pds.PageCount)
    {
          pageBar += "<a href=\"javascript:void(0)\">下一頁</a>";
    }
    else
    {
          pageBar += "<a href=\"" + Request.CurrentExecutionFilePath + "?Page=" + (currentPageIndex + 1) + "\">下一頁</a>";
    }
    if (currentPageIndex == pds.PageCount)
    {
          pageBar += "<a href=\"javascript:void(0)\">末頁</a>";
    }
    else
    {
          pageBar += "<a href=\"" + Request.CurrentExecutionFilePath + "?Page=" + pds.PageCount + "\">末頁</a>";
    }
    return pageBar;
}

// 建立測試表
DataTable GetDocumentTable()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("DocumentId", typeof(int));
    dt.Columns.Add("Title", typeof(string));
    for (int i = 1; i <= 30; i++)
    {
         DataRow row = dt.NewRow();
         row["DocumentId"] = i;
         row["Title"] = "文件標題 " + i + "";
         dt.Rows.Add(row);
    }
    return dt;
}

前臺.aspx程式碼

<form id="form1" runat="server">
    <div>
        <asp:Repeater ID="rptDocumentList" runat="server">
            <HeaderTemplate>
                <ul>
            </HeaderTemplate>
            <ItemTemplate>
                <li>
                    <%# DataBinder.Eval(Container.DataItem, "Title")%></li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>
    </div>
    <div class="pageBar">
        <asp:Literal ID="ltlPageBar" runat="server"></asp:Literal>
    </div>
</form>

 

下載程式碼示例:Repeater控制元件的分頁實現 PageDemo.RAR

相關文件:Repeater控制元件實現編輯、更新、刪除操作  Repeater多行間隔顯示分隔符的方法  Repeater中巢狀使用Repeater

相關文章