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

ASP.NET AspNetPager 分頁控件完整使用教學

     編輯:ASP.NET 基礎

Wuqi.Webdiyer.AspNetPager 是經典免費分頁控件,支援 `GridView`、`Repeater`、`DataList` 等資料控件,提供豐富樣式與事件。本文示範搭配 `Repeater` + `SqlDataAdapter` 分頁填充。

1. 專案引用與頁面註冊

  • 將 `AspNetPager.dll` 放入 `Bin/` 或 NuGet 安裝 `AspNetPager`。
  • 頁面頂端註冊:`<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>`

2. 前端標記

<webdiyer:AspNetPager ID="AspNetPager1" runat="server"
    PageSize="15"
    AlwaysShow="True"
    FirstPageText="首頁" PrevPageText="上一頁"
    NextPageText="下一頁" LastPageText="尾頁"
    OnPageChanged="AspNetPager1_PageChanged"
    CssClass="pagination" />

<asp:Repeater ID="Repeater1" runat="server">
  <HeaderTemplate><table><tr><th>標題</th><th>時間</th></tr></table></HeaderTemplate>
  <ItemTemplate><tr><td><%# Eval("Title") %></td><td><%# Eval("CreateTime") %></td></tr></ItemTemplate>
</asp:Repeater>

3. 後端綁定邏輯

private void BindData() {
    string connStr = ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString;
    using (var conn = new SqlConnection(connStr)) {
        var cmd = new SqlCommand("SELECT * FROM Articles ORDER BY CreateTime DESC", conn);
        var da = new SqlDataAdapter(cmd);
        var ds = new DataSet();
        
        // 關鍵:設定總筆數,控件自動計算總頁數
        AspNetPager1.RecordCount = GetTotalCount(); // 獨立查詢 COUNT(*)
        
        // Fill 當頁資料:startIndex = (CurrentPageIndex-1)*PageSize
        da.Fill(ds, (AspNetPager1.CurrentPageIndex - 1) * AspNetPager1.PageSize, 
                AspNetPager1.PageSize, "Articles");
        
        Repeater1.DataSource = ds.Tables["Articles"];
        Repeater1.DataBind();
    }
}

private int GetTotalCount() {
    // 執行 SELECT COUNT(*) FROM Articles 回傳 int
}

protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) BindData();
}

protected void AspNetPager1_PageChanged(object sender, EventArgs e) {
    BindData();  // 換頁時重新綁定
}

4. 關鍵屬性速查

屬性說明
PageSize每頁筆數
RecordCount總筆數 (必須設定,否則不顯示)
CurrentPageIndex當前頁碼 (1-based,用戶點擊自動更新)
AlwaysShow單頁時是否仍顯示控件
NumericButtonCount數字按鈕顯示個數
PagerStyle.Mode`Numeric`/`NextPrev`/`NextPrevWithFirstLast`/`NumericFirstLast`
CustomInfoHTML自訂統計資訊,如「共 {0} 頁 / {1} 筆」

5. 常見問題與技巧

  • 資料不變但換頁無效:忘記在 `PageChanged` 事件呼叫 `BindData()`。
  • RecordCount 每次查詢慢:快取總筆數 (如 `Cache["ArtCount"]`),資料變更時失效。
  • 大資料量優化:改用 `ROW_NUMBER()` / `OFFSET FETCH` 只取當頁,避免 `Fill` 整張表再截取。
  • Ajax 無刷新分頁:搭配 `UpdatePanel` 包裹 `Repeater` + `AspNetPager`,或改用前端 Pagination + WebAPI。
  • 樣式客製化:覆寫 `CssClass` 或繼承 `AspNetPager` 重寫 `Render` 方法。

6. 進階:自訂資料源分頁 (ObjectDataSource)

實作 `SelectMethod` 回傳 `IEnumerable`、`SelectCountMethod` 回傳 `int`,控件自動處理分頁邏輯,程式碼更乾淨。

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