- ASP.NET開發(fā)技巧精講
- 黃鳴
- 873字
- 2019-01-02 02:29:00
2.8 GridView結(jié)合Webdiyer以及分頁(yè)通用存儲(chǔ)過程海量數(shù)據(jù)分頁(yè)
前面說的分頁(yè)其實(shí)在數(shù)據(jù)量小的時(shí)候問題不大,如果有海量數(shù)據(jù),那么一次select所有的數(shù)據(jù)無疑是很不合理的一件事,所以就要每次只取當(dāng)前頁(yè)的數(shù)據(jù)即可,很多人都是使用“存儲(chǔ)過程+分頁(yè)控件”就可以完成,原理是用存儲(chǔ)過程先算出數(shù)據(jù)庫(kù)中的總行數(shù),然后每次傳當(dāng)前取第幾到第幾行即可。
本書推薦的分頁(yè)控件由Webdiyer所寫,網(wǎng)名陜北吳起娃,在百度搜索Webdiyer第一個(gè)就是,大家從http://www.webdiyer.com可以看到該控件的很多詳細(xì)介紹,從下載頁(yè)面:www.webdiyer.com/download/default.aspx下載最新的DLL和例子AspNetPager72Samples即可。Webdiyer控件的功能很多,這里不一一敘述,僅介紹其最簡(jiǎn)單的分頁(yè)功能。
第一,在你的項(xiàng)目中引用AspNetPager.dll,如圖2-21、圖2-22所示。

圖2-21 單擊“添加引用”命令

圖2-22 在bin目錄中選擇AspNetPager.dll引用
第二,在web.config的<pages><controls>中注冊(cè)該控件,代碼如下所示。
<pages> <controls> <addtagPrefix="asp"namespace="System.Web.UI"assembly="System.Web.Extensio ns, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <addtagPrefix="asp"namespace="System.Web.UI.WebControls"assembly= "System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken= 31BF3856AD364E35"/> <addtagPrefix="webdiyer"namespace="Wuqi.Webdiyer"assembly="AspNetPager"/> </controls> </pages>
第三,添加SqlHelper.cs類庫(kù)文件,這個(gè)文件可以從Webdiyer例子AspNetPager72Samples中找到,當(dāng)然如果你把SqlHelper.cs用得很熟就會(huì)知道這個(gè)是微軟公開的一個(gè)數(shù)據(jù)訪問類庫(kù),Webdiyer使用的SqlHelper.cs已經(jīng)把原SqlHelper.cs精簡(jiǎn)很多。注意修改SqlHelper.cs中的數(shù)據(jù)庫(kù)連接信息CONN_STRING,為你的web.config配置的信息如下所示。
publicstaticreadonlystring CONN_STRING=ConfigurationManager. ConnectionStrings["SQLCONN"].ConnectionString;
第四,添加前臺(tái)代碼如下所示。
<asp:GridViewID="GridView1"runat="server"BackColor="White"BorderColor="#C CCCCC" BorderStyle="None"BorderWidth="1px"CellPadding="4"Font-Size="12px" ForeColor="Black"GridLines="Both"PageSize="5"> <FooterStyleBackColor="#CCCC99"ForeColor="Black"/> <PagerStyleBackColor="White"ForeColor="Black"HorizontalAlign="Right"/> <SelectedRowStyleBackColor="#CC3333"Font-Bold="True"ForeColor="White"/> <HeaderStyleBackColor="#333333"Font-Bold="True"ForeColor="White"/> </asp:GridView> <webdiyer:aspnetpagerid="AspNetPager1"runat="server" PagingButtonSpacing="8px"onpagechanged="AspNetPager1_PageChanged" showcustominfosection="Right" CustomInfoHTML="總記錄數(shù):%RecordCount%,總頁(yè)數(shù):%PageCount%,當(dāng)前為第 %CurrentPageIndex%頁(yè)" urlpaging="True"width="100%"LayoutType="Table"ShowNavigationToolTip="true" UrlPageIndexName="pageindex"Font-Size="12px"></webdiyer:aspnetpager>
第五,添加后臺(tái)代碼如下所示。
protectedvoid Page_Load(object sender, EventArgs e) { if (!IsPostBack) { bind(); } } //綁定 publicvoid bind() { //cache the number of total records to improve performance object obj=Cache[GetType() + "totalOrders"]; if (obj == null) { int totalOrders=(int)SqlHelper.ExecuteScalar(CommandType.StoredProcedure, "P_GetOrderNumber"); Cache[GetType() + "totalOrders"]=totalOrders; AspNetPager1.RecordCount=totalOrders; } else { AspNetPager1.RecordCount=(int)obj; } } protectedvoid AspNetPager1_PageChanged(object src, EventArgs e) { GridView1.DataSource=SqlHelper.ExecuteReader(CommandType. StoredProcedure, "P_GetPagedOrders2005", newSqlParameter("@startIndex", AspNetPager1.StartRecordIndex), newSqlParameter("@endIndex", AspNetPager1.EndRecordIndex)); GridView1.DataBind(); }
第六,添加分頁(yè)通用存儲(chǔ)過程。
第一個(gè)存儲(chǔ)過程:
setANSI_NULLSON setQUOTED_IDENTIFIERON go --分頁(yè)存儲(chǔ)過程計(jì)算行數(shù) ALTERPROCEDURE [dbo].[P_GetOrderNumber] AS selectcount(*)from章立民工作室; RETURN
第二個(gè)存儲(chǔ)過程:
setANSI_NULLSON setQUOTED_IDENTIFIERON go --分頁(yè)通用存儲(chǔ)過程 ALTERPROCEDURE [dbo].[P_GetPagedOrders2005] (@startIndex INT, @endindex INT ) AS begin WITH章立民工作室AS( SELECT ROW_NUMBER()OVER(ORDERBY員工編號(hào))AS Row,員工編號(hào),身份證號(hào)碼,姓名,性別,地址 from章立民工作室) SELECT員工編號(hào),身份證號(hào)碼,姓名,性別,地址 FROM章立民工作室 WHERE Row between @startIndex and @endIndex end
說明:這里使用了SQLServer 2005特有的WITH遞歸方法,關(guān)于這個(gè)可以參考本書第8章或者網(wǎng)絡(luò)。
最終顯示在網(wǎng)頁(yè)中的效果如圖2-23、圖2-24所示。

圖2-23 Webdiyer的AspNetPager分頁(yè)控件第1頁(yè)
總結(jié):Webdiyer的AspNetPager分頁(yè)控件還有許多功能,如果你有需要可以關(guān)注其網(wǎng)站。而且AspNetPager是完全免費(fèi)且開放源代碼的ASP.NET控件,可以被用于商業(yè)目的,唯一的條件是保留控件中的版權(quán)信息。所謂的版權(quán)信息是HTML代碼中的信息:<!-- AspNetPager V7.2 for VS2005 & VS2008 Copyright:2003-2008 Webdiyer (www. webdiyer.com) -->,應(yīng)該說這樣的版權(quán)信息一點(diǎn)也不會(huì)影響使用,所以本書鄭重推薦。

圖2-24 Webdiyer的AspNetPager分頁(yè)控件第2頁(yè)
- 一步一步學(xué)Spring Boot 2:微服務(wù)項(xiàng)目實(shí)戰(zhàn)
- 自然語(yǔ)言處理實(shí)戰(zhàn):預(yù)訓(xùn)練模型應(yīng)用及其產(chǎn)品化
- Python數(shù)據(jù)可視化:基于Bokeh的可視化繪圖
- Java Web及其框架技術(shù)
- INSTANT Sencha Touch
- 數(shù)據(jù)結(jié)構(gòu)(Python語(yǔ)言描述)(第2版)
- Learn Scala Programming
- C/C++常用算法手冊(cè)(第3版)
- Scala編程(第5版)
- Kotlin進(jìn)階實(shí)戰(zhàn)
- Visual Basic 程序設(shè)計(jì)實(shí)踐教程
- 3D Printing Designs:The Sun Puzzle
- 計(jì)算機(jī)程序的構(gòu)造和解釋(JavaScript版)
- Spring Boot學(xué)習(xí)指南:構(gòu)建云原生Java和Kotlin應(yīng)用程序
- Java Web應(yīng)用開發(fā)