ASP.NET真假分页—真分页
當數據量過大,有幾萬甚至十幾萬條數據時,每次都從數據庫中取出所有數據就會降低查詢效率,系統運行慢,還有可能卡死,這時假分頁就會顯得很不人性化,因此有了真分頁的必要性。?
正如上篇博文總結歸納,“真”相對于“假”存在,即不藕斷絲連,從根部徹底斷開,在此處表現為根據查詢條件,只從數據庫中提取出需要的部分,適合于大數據。而真分頁的實現要借助于第三方控件AspNetPager。?
AspNetPager控件是一個基于.net的第三方免費開源控件,具有開發高效、使用方便、功能完整等優點。它彌補了GridView內置分頁以及PageDatasource類輔助分頁的不足,將分頁數據邏輯和頁面UI分離開來,非常有利于SQL分頁的實現。?
首先需要下載AspNetPager控件:http://www.webdiyer.com/downloads/
?
?
?
在VS中引用AspNetPager控件,歡迎參考博文《VS添加Ajax》中添加選擇項部分(有圖有真相),此處不再贅述:http://blog.csdn.net/u010773667/article/details/38518461
?
首先在web窗體中拖放一個gridview控件用來顯示數據,選中AspNetPager控件拖拽到web窗體相應位置用來進行分頁設置。顯示如下:
?
對分頁提示信息進一步改進。選中spNetPager控件,在右下角將會顯現一個小按鈕,單擊打開,對導航按鈕顯示文本進行設置
?
改進效果:
?
對頁索引文本或下拉框進行設置
?
改進效果見下圖:
?
如果還想顯示的更加具體,可進行自定義信息區顯示方式及內容設置
??上述對控件進行的所有設置將在VS中自動生成相應代碼,so我們也可以通過手動輸入代碼進行設置。
?
?
好了,設置好了前臺,接下來就要進行數據綁定了
?
?
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | protected void Page_Load(object sender, EventArgs e) ????????{????????? ????????????if (!Page .IsPostBack ) ????????????{ ????????????????string caid = Request.QueryString[caid]; ????????????????DataTable dt = new NewsManager().SelectAllNewsByCaId(caid);???????????? ????????????????anpCa.AlwaysShow = true; ????????????????anpCa.PageSize = 5; ????????????????anpCa.RecordCount = dt.Rows.Count; ????????????????int startIndex = anpCa.PageSize * 0; ????????????????int endIndex = anpCa.PageSize * 1;?????????????? ????????????????gvDataBind(caid, startIndex, endIndex);?????????????? ????????????} ????????} ????????private void gvDataBind(string caid,int startIndex,int endIndex) ????????{?????????? ????????????DataTable dt = new NewsManager().SelectPartNewsByCaId(caid, startIndex, endIndex); ????????????if (dt.Rows.Count != 0) ????????????{ ????????????????lblCategory.Text = dt.Rows[0][name].ToString();? //使類別標題顯示相應的類別名稱 ????????????} ????????????gvNew.DataSource = dt; ????????????gvNew.DataBind(); ????????} ??????protected void anpCa_PageChanged(object sender, EventArgs e) ????????{ ????????????string caid = 6; ????????????int startIndex = anpCa.PageSize * (anpCa.CurrentPageIndex - 1)+1; ????????????int endIndex = anpCa.PageSize * (anpCa.CurrentPageIndex); ????????????gvDataBind(caid, startIndex, endIndex); ????????} } |
?在D層數據查詢的部分代碼展示
#region 根據類別ID取出該類別下的所有新聞的分頁顯示/// /// 根據類別ID取出該類別下的所有新聞/// ///類別ID/// public DataTable SelectPartNewsByCaId(string caId,int startIndex, int endIndex){DataTable dt = new DataTable();SqlParameter[] paras = new SqlParameter[] {new SqlParameter (@caId,caId ),new SqlParameter (@startIndex,startIndex ),new SqlParameter (@endIndex,endIndex )};dt = sqlhelper.ExecuteQuery(dbo.category_showpage, paras, CommandType.StoredProcedure);return dt;}#endregion存儲過程(很重要) ?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | -- ============================================= -- Author:????? 王英群 -- Create date: 2014-8-10 -- Description: 跟據類別ID取出該類別下的所有新聞的分頁顯示 -- ============================================= ALTER PROCEDURE [dbo].[category_showpage] ????@caid int, ????@startIndex int, ????@endIndex int AS BEGIN ????with temptable as ( ????????select ROW_NUMBER() over (order by id desc) as 行號, * from ????????????( ????????????????select n.id,n.titile,n.createTime,c.[name],n.caId from news n ?????????????????inner join category c on n.caId =c.id and n.caId =@caid ????????????) as aa ????) ????? ????select * from temptable? where 行號 between @startIndex and @endIndex ????? END |
?
運行后效果見下圖:
?
?
注意:我的程序中多了一個參數(類別ID),在頁索引動態變化的過程中需要一直重新獲得,這一點我沒有實現,希望小伙伴們可以幫助我,謝謝!
?
?
結合上篇博文,假分頁適合于數據量相對較小的情況下,而真分頁適合于數據量大的情況下。真假分頁的使用,為我們的閱讀減負。
總結
以上是生活随笔為你收集整理的ASP.NET真假分页—真分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDFS【2.5.1】系列1:HDFS的
- 下一篇: Linux 学习笔记_12_文件共享服务