目標:建立不依賴特定資料顯示控件的通用分頁器,支援 GridView、Repeater、ListView 等任意 Control 衍生類別。
| 模式 | 核心方法 | 適用場景 |
|---|---|---|
| User Control (.ascx) | 宣告式組合 | 頁面片段重用 |
| Composite Control | CreateChildControls() | 封裝多個子控件、需動態重繪 |
| Custom Control | Render 覆寫 | 完全自訂輸出、極致效能 |
本專案採用複合控件,利用 CreateChildControls() 實現分頁 UI 動態構建與重繪。
Control,均擁有 DataBinding 事件PagedDataSource)實現分頁效果
// 概念性程式碼
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.DataBinding += Pager_DataBinding;
}
void Pager_DataBinding(object sender, EventArgs e)
{
// 1. 取得綁定的資料來源
// 2. 計算總筆數、頁碼
// 3. 建立 PagedDataSource 包裝原資料
// 4. 重新指派給顯示控件
}

Control 衍生類PageSize、PagerMode(Numeric/NextPrev/NextPrevAndNumeric)屬性UpdatePanel 相容)IPostBackEventHandler 處理頁碼點擊回發