今天研究了以下Asp.Net 可定製分頁,用起來很爽,下面給大家介紹下。
藉助 Asp.Net 提供的資料繫結控制項,我們無需太多的代碼,甚至不需要代碼,只要在 VS2005 中拖拽幾下控制項,進行一些屬性的設定,便可以實現在Asp時代需要做大量工作才能夠實現的分頁功能。但在實際的應用中,尤其是在Web網站程式中,我們經常需要更加豐富的使用者介面,而類似DataList或者 GridView 這樣的資料控制項往往不能或者很難滿足我們的要求。此時,我們常常求助於 重複器控制項,這樣我們依舊會面臨分頁及其顯示的問題。
本文不是講述如何進行資料庫分頁,而將注意力集中在如何?可定製地 擷取頁碼、擷取路徑、顯示分頁連結,並且通過構建一個使用者控制項來實現代碼重用上。如果你是一個初學者,你可以借鑒一下我的實現方式;如果你已經是一位高手,不妨提出設計的不足和改進意見。
本文是以介面的實現方式作為講述,這是因為我寫這篇文章的時候使用的是介面,但我後來又提供了一種更好的使用繼承的方式來實現,我提供了兩個版本的代碼下載,你可以相互對比著參考。
控制群組成
為了能迅速提起大家的興趣,可以先點擊這個連結,看看實際的效果:
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; } // 分頁大小}