首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET Repeater 搭配 PagedDataSource 實現分頁的精簡程式碼範例

     編輯:ASP.NET 基礎

核心程式碼片段

以下為在 Page_Load 或資料綁定方法中直接使用 PagedDataSource 為 Repeater 實現分頁的精簡寫法:


// 1. 取得資料來源(此處為 DataView)
DataView dv = bllBook.GetListByState("", true); // 業務邏輯層取得資料

// 2. 建立並設定 PagedDataSource
PagedDataSource objPage = new PagedDataSource
{
    DataSource = dv,
    AllowPaging = true,
    PageSize = 10 // 每頁 10 筆
};

// 3. 取得當前頁碼(QueryString 參數 "Page",預設第 1 頁)
int curPage = 1;
if (Request.QueryString["Page"] != null)
    curPage = Convert.ToInt32(Request.QueryString["Page"]);

objPage.CurrentPageIndex = curPage - 1; // 索引從 0 開始

// 4. 顯示分頁資訊
int recordCount = dv.Count;
int pageCount = objPage.PageCount;
lblCurPage.Text = $"第 {curPage} / {pageCount} 頁,共 {recordCount} 筆";

// 5. 產生上一頁/下一頁/首頁/末頁 連結
if (!objPage.IsFirstPage)
{
    lnkPrev.NavigateUrl = $"{Request.CurrentExecutionFilePath}?Page={curPage - 1}";
    lnkFirst.NavigateUrl = $"{Request.CurrentExecutionFilePath}?Page=1";
}

if (!objPage.IsLastPage)
{
    lnkNext.NavigateUrl = $"{Request.CurrentExecutionFilePath}?Page={curPage + 1}";
    lnkLast.NavigateUrl = $"{Request.CurrentExecutionFilePath}?Page={pageCount}";
}

// 6. 綁定 Repeater
Repeater1.DataSource = objPage;
Repeater1.DataBind();

關鍵點說明

  • CurrentPageIndex 為零基底:頁碼 1 對應索引 0,故須 curPage - 1。
  • QueryString 傳遞頁碼:採用 ?Page=2 形式,支援書籤與瀏覽器前進後退。
  • IsFirstPage/IsLastPage:自動判斷是否顯示導覽連結,避免產生無效連結。
  • Request.CurrentExecutionFilePath:取得當前頁面虛擬路徑,確保連結正確即使頁面重新命名。

前端 Repeater 範例


<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <div class="book-item">
            <h4><%# Eval("BookName") %></h4>
            <span>作者:<%# Eval("Author") %></span>
            <span>價格:<%# Eval("Price", "{0:C}") %></span>
        </div>
    </ItemTemplate>
</asp:Repeater>

<div class="pagination">
    <asp:HyperLink ID="lnkFirst" runat="server" Text="首頁" />
    <asp:HyperLink ID="lnkPrev" runat="server" Text="上一頁" />
    <asp:Label ID="lblCurPage" runat="server" />
    <asp:HyperLink ID="lnkNext" runat="server" Text="下一頁" />
    <asp:HyperLink ID="lnkLast" runat="server" Text="末頁" />
</div>

注意事項

此寫法同樣存在「全量查詢再切分」的效能問題。若資料超過數千筆,請改用 資料庫分頁查詢 + PagedDataSource.AllowCustomPaging = true + VirtualCount = 總筆數 模式,僅取得當頁資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved