當前位置:
首頁 >
自定义分页控件
發布時間:2024/4/14
29
豆豆
頁面中數據的分頁功能常常是令程序員比較頭疼的一件事情,并非是技術原因,而是分頁的繁瑣(包括:風格統一、參數的維護……)。ASP.NET控件中的 GridView和DataGrid等都直接支持分頁,但這兩中控件所擅長的是處理表格數據,而我們往往需要的顯示風格要比表格豐富的多;以我往常經驗, 我比較喜歡Repeater,可一隨心所欲的駕馭它來完成任何復雜的顯示,但可惜的是它沒有提供自動的分頁功能。
我們何不把這分頁功能給封裝起來呢?
讓我們來分析一下分頁的封裝到底要實現那些功能:數據顯示控件不應該關心“頁”的問題,因為它的功能是顯示數據,你只需要把它要顯示的數據給它就行了; 你必須承認分頁的獨立性,它與任何顯示控件物理上是隔離的,所以我們在設計該控件時不應該考慮任何數據顯示控件; 分頁控件需要維護一個“當前頁”、“頁大小”的上下文; 要確定分頁控件的數據無關性(這里的“數據”指的是在數據顯示控件中顯示的數據),數據顯示控件的數據源應該由系統的“業務層”提供, 而業務層的數據提供服務所查詢的具體數據有分頁控件的“當前頁”、“頁大小”確定(如:GetData(int pageIndex,int pageSize);); 分頁控件必須能夠維護當前頁面的參數; 分頁控件能夠維護統一的風格(由用戶指定顯示樣式,否則就顯示默認樣式)。 根據以上的分析,我們就可以來設計“分頁控件”(SimplePaper)了,看看咱們的實現代碼吧:
首先實現的是SimplePaper維護的數據及屬性,每個屬性的描述這里就不再詳述了
??1????private?string?_class;
??2????private?int?_pageSize?=?10;
??3????private?int?_numberCount?=?10;
??4????private?int?_virtualCount?=?0;
??5
??6????private?string?_prevText?=?"上一頁";
??7????private?string?_nextText?=?"下一頁";
??8????private?string?_firstText?=?"第一頁";
??9????private?string?_lastText?=?"最末頁";
?10
?11????///?<summary>
?12????///?獲取或設置控件關聯的樣式類
?13????///?</summary>
?14????[Category("Behavior")]
?15????[Description("Css的樣式類名稱")]
?16????public?string?Class?{
?17??????get?{
?18????????return?_class;
?19??????}
?20??????set?{
?21????????_class?=?value;
?22??????}
?23????}
?24
?25????///?<summary>
?26????///?獲取或設置“上一頁”在分頁導航條中顯示的文本,默認值“上一頁”
?27????///?</summary>
?28????[Category("Behavior")]
?29????[Description("上一頁文本")]
?30????public?string?PrevText?{
?31??????get?{
?32????????return?_prevText;
?33??????}
?34??????set?{
?35????????_prevText?=?value;
?36??????}
?37????}
?38
?39????///?<summary>
?40????///?獲取或設置“下一頁”在分頁導航條中顯示的文本,默認值“下一頁”
?41????///?</summary>
?42????[Category("Behavior")]
?43????[Description("下一頁文本")]
?44????public?string?NextText?{
?45??????get?{
?46????????return?_nextText;
?47??????}
?48??????set?{
?49????????_nextText?=?value;
?50??????}
?51????}
?52
?53????///?<summary>
?54????///?獲取或設置“第一頁”在分頁導航條中顯示的文本,默認值“第一頁”
?55????///?</summary>
?56????[Category("Behavior")]
?57????[Description("第一頁文本")]
?58????public?string?FirstText?{
?59??????get?{
?60????????return?_firstText;
?61??????}
?62??????set?{
?63????????_firstText?=?value;
?64??????}
?65????}
?66
?67????///?<summary>
?68????///?獲取或設置“最末頁”在分頁導航條中顯示的文本,默認值“最末頁”
?69????///?</summary>
?70????[Category("Behavior")]
?71????[Description("最末頁文本")]
?72????public?string?LastText?{
?73??????get?{
?74????????return?_lastText;
?75??????}
?76??????set?{
?77????????_lastText?=?value;
?78??????}
?79????}
?80????
?81????///?<summary>
?82????///?獲取或設置分頁的大小,默認值10
?83????///?</summary>
?84????[Category("Behavior")]
?85????[Description("頁大小")]
?86????public?int?PageSize?{
?87??????get?{
?88????????return?_pageSize;
?89??????}
?90??????set?{
?91????????_pageSize?=?value;
?92??????}
?93????}
?94
?95????///?<summary>
?96????///?獲取或設置分頁導航條中顯示的頁碼數量,默認10
?97????///?</summary>
?98????[Category("Behavior")]
?99????[Description("分頁中要顯示的頁碼數量")]
100????public?int?NumberCount?{
101??????get?{
102????????return?_numberCount;
103??????}
104??????set?{
105????????_numberCount?=?value;
我們何不把這分頁功能給封裝起來呢?
讓我們來分析一下分頁的封裝到底要實現那些功能:
首先實現的是SimplePaper維護的數據及屬性,每個屬性的描述這里就不再詳述了
??1????private?string?_class;
??2????private?int?_pageSize?=?10;
??3????private?int?_numberCount?=?10;
??4????private?int?_virtualCount?=?0;
??5
??6????private?string?_prevText?=?"上一頁";
??7????private?string?_nextText?=?"下一頁";
??8????private?string?_firstText?=?"第一頁";
??9????private?string?_lastText?=?"最末頁";
?10
?11????///?<summary>
?12????///?獲取或設置控件關聯的樣式類
?13????///?</summary>
?14????[Category("Behavior")]
?15????[Description("Css的樣式類名稱")]
?16????public?string?Class?{
?17??????get?{
?18????????return?_class;
?19??????}
?20??????set?{
?21????????_class?=?value;
?22??????}
?23????}
?24
?25????///?<summary>
?26????///?獲取或設置“上一頁”在分頁導航條中顯示的文本,默認值“上一頁”
?27????///?</summary>
?28????[Category("Behavior")]
?29????[Description("上一頁文本")]
?30????public?string?PrevText?{
?31??????get?{
?32????????return?_prevText;
?33??????}
?34??????set?{
?35????????_prevText?=?value;
?36??????}
?37????}
?38
?39????///?<summary>
?40????///?獲取或設置“下一頁”在分頁導航條中顯示的文本,默認值“下一頁”
?41????///?</summary>
?42????[Category("Behavior")]
?43????[Description("下一頁文本")]
?44????public?string?NextText?{
?45??????get?{
?46????????return?_nextText;
?47??????}
?48??????set?{
?49????????_nextText?=?value;
?50??????}
?51????}
?52
?53????///?<summary>
?54????///?獲取或設置“第一頁”在分頁導航條中顯示的文本,默認值“第一頁”
?55????///?</summary>
?56????[Category("Behavior")]
?57????[Description("第一頁文本")]
?58????public?string?FirstText?{
?59??????get?{
?60????????return?_firstText;
?61??????}
?62??????set?{
?63????????_firstText?=?value;
?64??????}
?65????}
?66
?67????///?<summary>
?68????///?獲取或設置“最末頁”在分頁導航條中顯示的文本,默認值“最末頁”
?69????///?</summary>
?70????[Category("Behavior")]
?71????[Description("最末頁文本")]
?72????public?string?LastText?{
?73??????get?{
?74????????return?_lastText;
?75??????}
?76??????set?{
?77????????_lastText?=?value;
?78??????}
?79????}
?80????
?81????///?<summary>
?82????///?獲取或設置分頁的大小,默認值10
?83????///?</summary>
?84????[Category("Behavior")]
?85????[Description("頁大小")]
?86????public?int?PageSize?{
?87??????get?{
?88????????return?_pageSize;
?89??????}
?90??????set?{
?91????????_pageSize?=?value;
?92??????}
?93????}
?94
?95????///?<summary>
?96????///?獲取或設置分頁導航條中顯示的頁碼數量,默認10
?97????///?</summary>
?98????[Category("Behavior")]
?99????[Description("分頁中要顯示的頁碼數量")]
100????public?int?NumberCount?{
101??????get?{
102????????return?_numberCount;
103??????}
104??????set?{
105????????_numberCount?=?value;
轉載于:https://www.cnblogs.com/cwy173/archive/2009/11/13/1602767.html
總結
- 上一篇: .NET上下文拦截
- 下一篇: 剪贴板所有api函数