超级简单:在你的ASP.NET页面自定义列表和分页
?代碼:/Files/zhuqil/custompagingandlisting.rar
?AdventureWorks數據庫:http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004
??
???? 這個例子展示如何使用SQL Server 2005 的ROW_NUMBER功能去分頁,以及通過在code-behind中自定義HTML輸出比較好看的界面。
? ?首先,我們必須去選擇的列表記錄,通常使用的分頁技術是我們將所有的記錄放入一個dataset,然后使用PagedDataSource來顯示適當的頁。這種技術主要不好的地方是在內存中存儲了所有的記錄,而在頁面上僅僅顯示其中的一些記錄。每次你點擊頁碼,每次它都將查詢了所有的記錄。為了克服這個頭痛的問題,我將有效地使用SQL Server 2005的ROW_NUMBER?功能。
????我們將傳遞兩個參數,存儲過程能查詢特定的記錄。
??? @intCurrentPage?int?- 這個參數用來表示當前頁碼。
??? @intRecordPerPage?int?-? 這個參數用來得到一頁中顯示的記錄數量。
??? 例如,如果我們將?@intCurrentPage設置為1?,將@intRecordPerPage設置為10,結果將會是1到10的記錄。 這個存儲過程連接到AdventureWorks數據庫,從Production.Product?查詢記錄。
代碼???? 通過傳遞:@intCurrentPage=1, @intRecordPerPage=10,執行上面的存儲過程。
???
??? 第一個結果集是第一頁的記錄,第二個結果集是記錄的總和。
??? 在AdventureWorks 數據庫中執行這個存儲過程,創建一個連接字符串來連接AdventureWorks。
connectionString?="Data?Source=[SERVER?NAME];???Initial?Catalog=AdventureWorks;User?ID=[USERNAME];?Password=[PASSWORD]"?/>
??? 現在我們在數據庫中準備好存儲過程,開始實現我們的列表和分頁方法。?為了顯示列表,我將不使用任何數據源控件,我將直接在aspx頁面上輸出。對于這個,在后臺代碼中,我們首先定義兩個字符串。
???protected?string?strList;?//?to?set?the?HTML?of?the?listing???protected?string?strPages;//to?set?the?HTML?of?paging
???? 字符串變量strList?用來保存記錄的列表的HTML,strPages?用來保存分頁的HTML。首先,我必須得到頁的索引,我將頁的索引存放在隱藏的文本字段中(txtHidPageIndex)。默認,第一頁將被顯示。我們將用戶點擊的頁索引,將它存儲在這個隱藏字段中 ,服務端能訪問這個隱藏字段來獲得頁碼。我們需要一個服務端控件來監聽頁面的點擊。?我在頁面上添加一個link button控件(lnkPaging)來初始化clicking,它也能完成一些服務端的動作。
??? 寫一個javascript函數來接受頁碼和將頁碼以及將它放到隱藏字段中。?在此之后,執行link button的回傳,這樣我們能執行服務端的操作。該鏈接按鈕的Click事件可以發起的ASP.NET doPostBack方法。
function?doPaging(intPageIndex){
????document.getElementById('txtHidPageIndex').value=intPageIndex;
????__doPostBack('lnkPaging','');
}
??link button (lnkPaging) 的后臺代碼如下:
?????protected?void?lnkPaging_Click(object?sender,?EventArgs?e)????????{
????????????DoSearch(int.Parse(txtHidPageIndex.Value));
????????}
???? 下面的片段顯示如何將記錄填充到reader中。
代碼???????我設置一頁顯示10條記錄。如果你想讓用戶自定義每頁的記錄數量,在你的網站中,你能添加一個選項設置值。用這個值來作為每頁顯示的記錄數量。現在,我們在reader已經有了結果。創建一個StringBuilder?來存儲創建的?HTML 。
代碼???? 在創建列表的HTML之后,我將它分配給一個保護的變量strList。
strList = sbHTML.ToString();
??? 現在完成我們主要要做的事情:如何去分頁。對于分頁,首先我們需要所有記錄的總數量。能從reader中得到這個數量。
??????objReader.NextResult();????????int?intTotalRecords?=?0;
????????if?(objReader.Read())?{
????????????intTotalRecords?=int.Parse(objReader[0].ToString());
????????}
???? 現在,intTotalRecords變量包含了記錄的總數量。第二個任務是去找頁碼數量。如下所示:
代碼???? 現在我們必須去找每一頁的開始的一條記錄和最后的一條記錄。我們假設顯示在頁碼列表中包含5頁。 因此用戶能獲得First和Previous按鈕,接下來是下5頁的頁碼按鈕,還有Next和Last按鈕。
代碼??? 現在,我們要能通過頁的索引和剩余的記錄數目來隱藏和禁用First, Previous, Next, 和Last button。
代碼??? 現在,我們能添加一個頁數,它從第一頁到最后一頁。?
代碼??? 在實現了分頁的HTML之后,在protected類型的字符串strPages中存儲StringBuilder類型的值。分頁就是就是如果頁數超過一頁,就僅僅顯示一頁。
代碼???? 如果使用這個方法,你不需要任何的數據源控件。我們創建和管理列表和分頁的HTML。這項技術在你的頁面上將給你帶來最大的靈活性。
參考原文:http://www.codeproject.com/KB/aspnet/custompagingandlisting.aspx
本文轉自麒麟博客園博客,原文鏈接:http://www.cnblogs.com/zhuqil/archive/2010/01/02/custompagingandlisting.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的超级简单:在你的ASP.NET页面自定义列表和分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dubbo管控台安装
- 下一篇: DIV+CSS规范命名