1. 引言
ASP.NET 2.0裡為我們提供了全新的GridView控件,它在DataGrid基礎之上增 加了許多新的特性,例如不編寫一行代碼就可以和數據源控件結合起來實現數據 的展示並且分頁,但是這種分頁效率較低,這是從數據庫一次讀取所有的數據再 進行分頁,如果數據量較少則可以實現快速開發,但是假如數據庫中存放大量數 據,這種操作性能顯得就比較低了,所以我們一般自己編寫數據讀取方法,在 PageIndexChanging事件中綁定新頁,這時會遇到一個問題,如果我們僅讀取一頁 數據時GridView不能正確計算出共有多少頁,也就無法正確呈現出分頁按鈕,因 此需要考慮對其進行擴展。另外DataList控件提供了靈活的模版設置以顯示記錄 內容,但是它有一個最大的弱點就是不支持分頁,我們同樣試圖擴展DataList以 增加分頁的特性。
2. 分析
之所以要將GridView和DataList放在一起考慮,是因為不論哪一個數據綁定控 件生成分頁鏈接列表時需要執行相似的操作。GridView控件本身支持分頁,所以 在開發自定義表格控件時,只需要加入相應的按鈕服器端控件,將CommandName屬 性設置為Page,並設置CommandArgument屬性為特定值,即可由GridView捕捉到頁 面更改事件,為了避免在代碼中出現“魔法字符”,定義了常量類保存使用的字 符串常量。但是這種方法對於DataList卻不適用,因為DataList不能接收到客戶 端的回發事件,這也是DataList類和GridView類的一個區別—DataList類沒有實 現IPostBackEventHandler接口。為了能夠使DataList接收客戶端回發並觸發分頁 事件,需要使自定義DataList實現IPostBackEventHandler接口,並使用自定義事 件參數類在觸發事件時傳遞頁碼信息。
現在自定義GridView和DataList控件均可以實現分頁了,為了使兩者有一個統 一的分頁外觀,定義分頁基類實現分頁功能,並且針對DataList分頁,繼承分頁 基類並設置分頁按鈕的回發腳本。最後為了能夠把分頁按鈕作為一個整體添加到 表格中,使之繼承自TableCell(表格中的單元格)。