1. 程式人生 > 其它 >【開源】QuickPager ASP.NET2.0分頁控制元件V2.0.0.4 增加了幾個分頁演算法

【開源】QuickPager ASP.NET2.0分頁控制元件V2.0.0.4 增加了幾個分頁演算法

     最近忙一個專案,沒有太多的時間來升級分頁控制元件。不過還是生了一下,V2.0.0.4。變化不是太大,修改了一個屬性的名稱,增加了兩種分頁演算法,還有兩個分頁演算法的組合方式。

     原來的 SetGetDataKind 屬性名稱改成了 SetRunKind。這個是由於一開始沒有規劃好,導致了名稱的衝突。含義沒有變化。

     增加了兩個分頁演算法:Max分頁和顛倒分頁(就是Top的巢狀)。

     Max的優點就是簡單高效,可以很容易的利用索引,缺點就是,排序欄位只能有一個,而且排序欄位的值不能有重複的。

     顛倒Top法,優點是可以設定多個排序欄位(當然一個也可以),缺點呢就是寫起來有點複雜(當然這個在分頁控制元件內部處理了),效率比Max要慢一點,但是比表變數要快一點。和Row_Number的分頁演算法的優勢就是可以在SQL Sercer 2000 和 Access、Excel裡面使用。Row_Number只能在SQL Server2005裡面使用。

     這兩個分頁演算法各有優缺點,如何能夠取長補短,那該多好呀。這個也不是不可能的呀,於是我又加了兩種分頁演算法,這兩個不是單獨存在的,而是把現有的兩種分頁演算法“組合”在一起。

Max_TopTop:會根據排序欄位的數量來判斷,如果是一個排序欄位,那麼就採用max的分頁演算法;如果是多個排序欄位,那麼就採用顛倒top的方法。

Max_TableVar:和上面的類似。有些人喜歡使用表變數,不喜歡top巢狀,更不喜歡顛來倒去的,那麼沒關係,可以選用這種分頁演算法。

     其他的就像不說了,有空再詳細說明一下分頁控制元件的內部結構可採用的設計模式和遵循的原則。

原始碼下載地址http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html

     使用方法請檢視以前的帖子,謝謝。有空在整理一下。

多種分頁演算法的呼叫方法,在屬性裡面實現。

/**//// 分頁演算法的例項
        public PageManage.PageSQL ManagerPageSQL
        {
            set { MgrPageSQL = value; }
            get
            {
                PageManage.PageSQL tmp = MgrPageSQL;
                if (tmp == null)
                {
                    switch (SetSQLKind)
                    {
                        case myPageSQLKind.Row_Number:
                            tmp = new JYK.Controls.PageManage.SQL_Row_Number();
                            break;

                        case myPageSQLKind.TableVar:
                            tmp = new JYK.Controls.PageManage.SQL_TableVar();
                            break;

                        case myPageSQLKind.MaxMin:
                            tmp = new JYK.Controls.PageManage.SQL_Max();
                            break;
                   
                        case myPageSQLKind.TopTop :
                            tmp = new JYK.Controls.PageManage.SQL_TopTop();
                            break;

                        case myPageSQLKind.Max_TopTop :
                            if (this.TableOrderColumns.Contains(","))
                            {
                                //多欄位排序
                                CommandClass.MsgBox("Max_TopTop2", false);
                                tmp = new JYK.Controls.PageManage.SQL_TopTop();
                            }
                            else
                            {
                                //一個排序欄位
                                CommandClass.MsgBox("Max_TopTop1", false);
                                tmp = new JYK.Controls.PageManage.SQL_Max();
                            }
                            break;

                        case myPageSQLKind.Max_TableVar :
                            if (this.TableOrderColumns.Contains(","))
                            {
                                //多欄位排序
                                tmp = new JYK.Controls.PageManage.SQL_TableVar();
                            }
                            else
                            {
                                //一個排序欄位
                                tmp = new JYK.Controls.PageManage.SQL_Max();
                            }
                            break;
                    }

                    MgrPageSQL = tmp;
                }

                if (tmp.myPage == null)
                    tmp.myPage = this;

                return tmp;
            }
        }