今天研究了以下Asp.Net 可定制分頁,用起來很爽,下面給大家介紹下。
借助 Asp.Net 提供的數據綁定控件,我們無需太多的代碼,甚至不需要代碼,只要在 VS2005 中拖拽幾下控件,進行一些屬性的設置,便可以實現在Asp時代需要做大量工作才能夠實現的分頁功能。但在實際的應用中,尤其是在Web站點程序中,我們經常需要更加豐富的用戶界面,而類似DataList或者 GridView 這樣的數據控件往往不能或者很難滿足我們的要求。此時,我們常常求助於 Repeater 控件,這樣我們依舊會面臨分頁及其顯示的問題。
本文不是講述如何進行數據庫分頁,而將注意力集中在如何實現可定制地 獲取頁碼、獲取路徑、顯示分頁鏈接,並且通過構建一個用戶控件來實現代碼重用上。如果你是一個初學者,你可以借鑒一下我的實現方式;如果你已經是一位高手,不妨提出設計的不足和改進意見。
本文是以接口的實現方式作為講述,這是因為我寫這篇文章的時候使用的是接口,但我後來又提供了一種更好的使用繼承的方式來實現,我提供了兩個版本的代碼下載,你可以相互對比著參考。
控件組成
為了能迅速提起大家的興趣,可以先點擊這個鏈接,看看實際的效果:
http://www.tracefact.net/Demo/Pager/Default.aspx
IUrlManager 接口
想一想如果你在設計一個可重用的分頁用戶控件,你面臨的問題是什麼?每個人獲取頁碼的方式都不同,例如,你的站點URL可能是類似這樣的 Default.aspx?page=1 ,而另外一個站點的URL 是這樣的 Default.aspx?p=1。更有一些可能根本不使用 QueryString 來獲取頁碼,它們的URL可能是這樣的 Default-1.aspx、Default-2.aspx 等等。獲取頁碼的方式不同,根據頁碼產生鏈接地址的方法自然也不相同。按照封裝變化的思想,我們應該將這變化的部分取出來,建一個 IUrlManager 接口:
public interface IUrlManager { int CurrentPageIndex{ get; } // 當前頁碼 string GetPageUrl(int pageIndex); // 根據 頁碼 獲取頁面路徑 }
而實際上,當前頁碼不應該大於總頁數,所以獲取當前頁CurrentPageIndex屬性需要能得知 總頁數,而總頁數通常是由 記錄數 和 分頁大小計算得出,這個接口實際上應該是這樣:
public interface IUrlManager { int CurrentPageIndex{ get; } // 當前頁碼 string GetPageUrl(int pageIndex); // 根據 頁碼 獲取頁面路徑 int PageCount { get; } // 總頁數 int RecordCount { get; } // 記錄總數 int PageSize { get; } // 分頁大小 }