上一次有點匆忙,如何使用介紹的不是太清楚,而且這兩天有改掉了幾個bug,所以這次呢詳細說一下,然後更新一下代碼和demo。
源代碼和demo的下載:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html
JYK.Controls.Pager.QuickPagerSQL PagerSQL = new QuickPagerSQL();
//設置保存屬性的位置。可以不保存,也可以保存在隱藏域、Cookie、Session等地方。默認保存在隱藏域裡面
//這裡設置為不保存
PagerSQL.SaveLocation = JYK.Common.SaveViewStateLocation.NoSave;
//設置密鑰。不保存忽略該屬性。八位的數字。空字符串表示不加密,null表示使用默認密鑰
//這裡不需要設置,也就是不加密
//PagerSQL.SaveKey = "12121212";
//設置屬性
PagerSQL.TableName = "News_NewsInfo"; //表名或者視圖名稱
PagerSQL.TableShowColumns = "*"; //需要顯示的字段
PagerSQL.TableIDColumn = "NewsID"; //主鍵名稱,不支持復合主鍵
PagerSQL.TableOrderByColumns = "NewsID"; //排序字段,根據分頁算法而定,可以支持多個排序字段
PagerSQL.TableQuery = ""; //查詢條件
PagerSQL.PageSize = 4; //一頁顯示的記錄數
//選擇分頁算法
PagerSQL.SetPagerSQLKind = PagerSQLKind.MaxMin;
//拼接分頁算法
PagerSQL.CreateSQL();
//獲取統計記錄數的SQL語句,比如 select count(1) from Table
string sql = PagerSQL.GetRecordCountSQL;
//設置總記錄數,您可以使用PagerSQL.GetRecordCountSQL返回的SQL語句到數據庫裡面查詢
//這裡就簡化操作,直接設置一個數值了。
PagerSQL.PageCount = 100;
//計算總頁數,防止傳入的頁號不在有效地范圍內,而產生無效的SQL語句。
PagerSQL.ComputePageCount();
//獲取SQL語句。如果想得到第三頁的SQL,那麼傳遞“3”就可以了。
//如果傳入的頁號大於總頁數,那麼會返回最後一頁的SQL語句。
//如果頁號小於1,會返回第一頁的SQL語句。
sql = PagerSQL.GetSQLByPageIndex(3) ;
FAQ:
1、為什麼要有一個保存位置的設置?
由於Pager_SQL是從QuickPager分頁控件裡面分離出來的,所以他的目的要能夠適應web控件的特點。如果您自己編寫過自定義控件的話,那麼您可能會遇到這樣的問題:明明我在Page_Load裡面給控件的屬性賦值了,但是在回發(提交表單)的時候卻提示我沒有給屬性賦值(屬性值為空)。這是為什麼呢?原因就在於在回發的時候Page_Load被延後執行了。
那麼要如何解決這個問題呢?一是在Oninit裡面賦值,一是在控件內部把屬性值保存在Viewstate裡面。而我這采用了後者。Viewstate裡面的東東誰然看起來亂七八糟的,但是很容易就可以把它變成能夠看懂的信息,那麼如果把表名、字段名這些敏感的信息放在Viewstate裡面顯然是不安全的,所以我就自己寫了一個類庫,可以把信息保存在隱藏域(當然也可以是Cookie、Session等)裡面,然後還可以設置密鑰,這樣沒有密鑰的話是不能破解的,除非暴力破解或者瞎蒙。
當然了現在Pager_SQL已經獨立出來了,有的時候是不需要保存的,或者您覺得保存在客戶端了即使加密也是不安全的,那麼您可以選擇不保存。
為了能夠滿足不同的需要,所以設置了這兩個屬性,一個是選擇保存信息的位置(當然可以不保存),另一個就是加密用的密鑰。