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

打造通用 ASP.NET 分頁控件 SqlPager:支援所有列表控件的分頁引擎

     編輯:關於ASP.NET

ASP.NET 內建只有 `DataGrid` 支援分頁,`DataList`、`Repeater`、`CheckBoxList` 等常用列表控件皆無分頁功能。雖可各自擴充,但分頁邏輯高度雷同,違反 DRY 原則。本文介紹一個通用複合控件 `SqlPager`,透過 `ControlToPaginate` 屬性指定任意列表控件,實現「一次開發,處處復用」的分頁架構。

SqlPager 核心特色

  • 通用性:支援 `ListControl`(`DropDownList`、`ListBox`、`RadioButtonList` 等)與 `BaseDataList`(`DataList`、`Repeater` 等)兩大族群
  • 雙導航模式:`NextPrev`(首/上/下/末按鈕)與 `NumericPages`(頁碼下拉)
  • 雙分頁引擎:
    • Cached:一次性載入全量資料至 `DataTable`,可選擇放入 `Cache` 物件重用
    • NonCached:僅查詢當前頁資料,類似 `DataGrid` 自訂分頁,適合大量資料
  • 完整程式介面:`CurrentPageIndex`、`ItemsPerPage`、`PageCount`、`SelectCommand`、`ConnectionString`、`SortField` 等屬性與 `PageIndexChanged` 事件

快速上手範例

' 頁面標記
<asp:ListBox ID="ListBox1" runat="server" />
<custom:SqlPager ID="SqlPager1" runat="server" 
    ControlToPaginate="ListBox1"
    ConnectionString="<%$ ConnectionStrings:MyDB %>"
    SelectCommand="SELECT ProductName FROM Products ORDER BY ProductID"
    ItemsPerPage="10"
    PagerStyle="NumericPages"
    PagingMode="NonCached" />

' 後台碼(通常無需撰寫,控件自動處理)
' 僅需在 Page_Load 確保首次載入
If Not IsPostBack Then
    SqlPager1.CurrentPageIndex = 0
End If

核心屬性詳解

屬性類型說明預設值
ControlToPaginateString同頁面內的列表控件 ID必填
ConnectionStringString資料庫連線字串必填
SelectCommandStringSELECT 查詢語句(不含 ORDER BY)必填
SortFieldString排序欄位名稱,自動產生 ORDER BY空
ItemsPerPageInteger每頁筆數10
PagerStyleEnumNextPrev / NumericPagesNextPrev
PagingModeEnumCached / NonCachedCached
CacheDurationIntegerCache 存活秒數(僅 Cached 模式)60

架構優勢

  1. 分頁邏輯與顯示控件完全解耦:列表控件只管綁定 `DataSource`,不知分頁為何物
  2. 資料存取策略可切換:開發期用 Cached 快速原型,上線改 NonCached 應對大數據
  3. 排序委託資料庫:`SortField` 自動轉 `ORDER BY`,避免記憶體排序大量資料
  4. 繼承 WebControl:擁有完整樣式屬性(字型、框線、顏色),無縫融入視覺設計

適用場景與遷移建議

  • 舊專案大量使用 `DataList`/`Repeater` 需補分頁功能
  • 新專案統一分頁風格、減少重複代碼
  • 現代專案建議改用 `GridView`/`ListView` 內建分頁或前端分頁(AJAX/Fetch + Web API)
  • 若維護 WebForms 專案,`SqlPager` 仍是快速落地的利器

`SqlPager` 體現了「組合優於繼承」的設計哲學,將橫切關注點(分頁)抽離為可複用元件,是 ASP.NET WebForms 時代元件化開發的經典範例。

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