分頁控件。支持多種數據庫,PostBakc和URL兩種分頁方式。 剛升級到.net2.0,還不是太完善。html
分頁控件的源代碼下載網址:http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html
(在網頁的下面)
下載文件裏面由一個測試網頁:http://localhost:5561/test/Testlist.aspx?fid=1
請注意後面的參數。
在webconfig裏面修改鏈接字符串和數據庫類型。DataType ---- 1: MS SQL ;2:Oledb;3:ODBC。
web
<appSettings>
<add key="DataType" value ="1"/>
appSettings>
<connectionStrings>
<add name="ConnStr" connectionString="Data Source=.;Initial Catalog=*** ;persist security info=False;user id=sa;pwd=;" providerName="System.Data.SqlClient"/>
connectionStrings>算法
環境說明:
IDE:vs2008。數據庫
Framework:.net 2.0。服務器
數據源:各類數據庫。
形式:服務器控件,引用DLL便可。
app
功能說明:
分頁的方式顯示提取數據。包括UI的繪製、分頁算法(根據屬性組合成SQL語句)、提取數據、綁定控件、計算總記錄數(能夠自動保存,以提升效率)ide
兩種分頁方式 PostBack 和 URL。(暫時只支持Postback分頁。)函數
貼兩個圖先:
優勢:測試
一、支持多重數據庫.net
這個要感謝 數據訪問函數庫(實際上是ADO.net2.0),還有就是 PageSQL 這個類。
二、使用簡單,能在控件內部實現的都實現了,外面只須要設置屬性就能夠實現分頁的功能,不須要處理翻頁時產生的事件。
最少只須要寫四行代碼就能夠搞定。
myPage.ControlGridID = GV.ID; //設置顯示數據的控件的ID值。
myPage.TableName = " TableName"; //表名或者字段名
myPage.TableOrderColumns = "OrderByColumns"; //排序字段
myPage.BindFirstPage(); //顯示第一頁的數據
三、兩種分頁方式 PostBack 和 URL,能夠隨時切換。
四、不使用存儲過程,便於分頁算法的升級。還能夠靈活設置查詢條件。(不使用存儲過程也能夠達到很高的效率)
分頁控件終於升級到了.net2.0,雖然功能上沒有增長,可是修改了大部分的內部代碼。原先的是基於 .net1.1 的,升級後基於 .net2.0。雖然如今 .net3.5都出來了,可是爲了可以更「兼容」一些,因此仍是採用了.net2.0。
原來的代碼是寫在了一個.cs文件裏面,看起來比較混亂,層次不夠分明,在想擴展的時候就比較麻煩,如今按照「職責」分紅了幾塊,每一塊負責一個功能。
PageSQL 負責生成分頁用的 SQL語句,
PageGetData 負責到數據庫裏(經過數據訪問函數庫)提取數據,而後填充到集合(好比DataTable)裏面,
PageUI 負責UI的繪製。
這樣就分工明確,便於替換,好比如今的分頁控件默認的數據庫是 SQL Server2005,那麼目前提供的分頁算法是利用Row_Number()來實現的,而 SQL Server2000 裏沒有這個函數,那麼就要換一個分頁算法,這時就能夠繼承PageSQL類,實現一個針對SQL Server2000的分頁算法(難道是傳說中的多態)。這樣就能夠很方便的更換數據庫和分頁算法(同一種數據庫,多種分頁算法)(難道是傳說中的對修改關閉?)。
使用方法和經常使用的屬性說明
public partial class TestList : BaseClass.BasePageList
{
protected void Page_Load(object sender, EventArgs e)
{
myPage.ControlGridID = GV.ID; //設置顯示數據的控件的ID值。
if (!Page.IsPostBack)
{
//屬性會保存在ViewState裏面,因此在第一次訪問的時候賦值就能夠了。
SetPageInfo();
}
}
private void SetPageInfo()
{
myPage.TableName = " TableName"; //表名或者字段名
//myPage.TableShowColumns = "*"; //顯示的字段
//myPage.TableIDColumns = "MasteID"; //主鍵
myPage.TableOrderColumns = "OrderByColumns"; //排序字段
myPage.PageSize = 10; //一頁的記錄數
myPage.NaviCount = 5; //頁號導航的數量
myPage.TableQuery = ""; //查詢條件
myPage.BindFirstPage(); //顯示第一頁的數據
}
}
缺點:
因爲時間倉儲,有些功能還不完善。提供源代碼,感興趣的話,歡迎一塊兒討論:)
直接看源碼:
http://www.cnblogs.com/jyk/archive/2008/06/25/1229967.html http://www.cnblogs.com/jyk/archive/2008/06/25/1229973.html 目前使用的分頁算法 set nocount on; with t_pager as ( select *,rn = ROW_NUMBER() OVER (ORDER BY id desc) FROM test_indexorder ) SELECT id,name,content,co1,co2,co3,co4,co5 from t_rn WHERE rn between 19007 and 19057;