作者將常見的「分頁功能」封裝為使用者控制項(.ascx),實現真正的資料庫分頁(而非 GridView 偽分頁),大幅降低大資料量下的效能壓力。
HiddenField(hdfcurr 目前頁、hdfcount 總筆數)維持跨回傳狀態。DelegateDataBind(DataTable dt),控制項觸發事件,宿主頁面實作資料查詢並繫結 GridView。// 控制項內
public delegate void DelegateDataBind(DataTable dt);
private DelegateDataBind _dataBindEvent;
public DelegateDataBind dataBindEvent { get => _dataBindEvent; set => _dataBindEvent = value; }
// 使用者點擊「下一頁」按鈕時
protected void btnNext_Click(object sender, EventArgs e)
{
int nextPage = (int)hdfcurr.Value + 1;
hdfcurr.Value = nextPage.ToString();
dataBindEvent?.Invoke(GetPageData(nextPage)); // 呼叫宿主實作的查詢邏輯
}
ROW_NUMBER() OVER (ORDER BY ...) 實作高效分頁(SQL Server 2005+)。作者分享「適度食用使用者控制項」心得:節省重複程式碼、實現功能鬆耦合、提升專案可維護性。