概述
在對網頁上的記錄進行分頁顯示時,一般用到兩種方式,分別是假分頁和真分頁。假分頁就是從資料庫中取出所有記錄然後再進行分頁;而真分頁相對來說就簡單多了,真分頁只需要從資料庫中取出當前頁需要顯示的記錄即可。如果你的記錄資料量比較小,用哪種方法都可以,如果記錄資料量特別大,這時就需要用我們的真分頁來提高我們的效率。
在這裡我們用aspnetpager分頁控制項來實現我們的真分頁。aspnetpager分頁控制項下載的地址是:http://www.webdiyer.com/Controls/AspNetPager/Downloads
實現過程
在正式真分頁實現之前,我們還需要說明一點,我們的aspnetpager將分頁功能完成後還需要一個綁定資料的控制項與之配合,我這裡採用的是GridView控制項,關於GridView控制項本身也可以實現分頁功能,但它屬於假分頁,實現起來也比較簡單只需要設定兩個屬性(AollowPaging和PageSize)即可完成,我們就不贅餘了,現在進入我們的實現過程。
1.添加AspNetPager控制項
在我們vs的工具箱——右擊——選擇項——瀏覽——選擇,選擇完後系統會自動添加控制項,到此我們該控制項就添加進工具箱了,接下來就像一般控制項一樣拉到我們添加的頁面就可。
2.實現代碼
我是採用三層架構並且利用我們的預存程序實現的我們分頁顯示的功能,具體步驟包括:
a.建立預存程序查詢語句
b.資料層進行資料查詢
c.前台代碼調用
a.建立預存程序查詢語句
首先我們要先從資料庫查詢所要顯示的記錄,我是採用預存程序實現的這個功能,下面這就是我們預存程序的代碼:
set ANSI_NULLS ONsetQUOTED_IDENTIFIER ONgo --=============================================--Author: 張文康-- Create date:2013-8-7--Description: 按頁查詢新聞--=============================================ALTER PROCEDURE[dbo].[news_selectByPage]@startIndex int,@endIndex intASBEGINwith temptbl as (SELECT ROW_NUMBER()OVER (ORDER BY id desc)AS Row, * from news )SELECT * FROMtemptbl where Row between @startIndex and @endIndexEND
b.資料層進行資料查詢
DAL層:
#region (有參數查詢)按頁查詢,根據每頁顯示記錄數 /// <summary> /// 按頁查詢,根據每頁顯示記錄數 /// </summary> /// <paramname="startIndex">該頁開始記錄數</param> /// <paramname="endIndex">該頁結束記錄數</param> /// <returns></returns> public DataTable SelectByPage(intstartIndex, int endIndex) { DataTable dt = new DataTable(); string cmdText ="news_selectByPage"; SqlParameter[] paras = newSqlParameter[]{ new SqlParameter("@startIndex",startIndex ), new SqlParameter("@endIndex",endIndex ) }; dt =sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure); return dt; } SQLHlper #region 該方法執行傳入的帶參數的SQL查詢語句或預存程序 /// <summary> /// 該方法執行傳入的帶參數的SQL查詢語句或預存程序 /// </summary> /// <paramname="cmdText">帶參數的SQL查詢語句或預存程序</param> /// <paramname="paras">參數集合</param> /// <paramname="ct">命令類型</param> ///<returns>查詢資料表</returns> public DataTable ExecuteQuery(stringcmdText, SqlParameter[] paras, CommandType ct) { dt = new DataTable(); cmd = new SqlCommand(cmdText,GetConn()); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); //比try catch 更好關閉資料來源的處理 using (sdr =cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } //sdr.Close(); //conn.Close(} return dt; } #endregion
c.前台代碼調用
using System;usingSystem.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;usingSystem.Web.UI.WebControls;using BLL;using System.Data; namespace Web{ public partial class test :System.Web.UI.Page { protected void Page_Load(object sender,EventArgs e) { if (!Page.IsPostBack) { //查詢總新聞條數 DataTable dt = newNewsManage().SelectAll(); int titleCount = dt.Rows.Count; anp.RecordCount = titleCount; //進行顯示 BindNews(); } else { BindNews(); } } //分頁控制項顯示該頁記錄數 protected voidAspNetPager1_PageChanged(object sender, EventArgs e) { //通過換頁顯示記錄 BindNews(); Response.Write("開始記錄數:"+anp.StartRecordIndex+"<br>結束記錄數"+anp.EndRecordIndex); } //通過分頁顯示記錄 private void BindNews() { //定義該頁開始記錄數 int start = anp.StartRecordIndex; //定義該頁結束記錄數 int end = anp.EndRecordIndex; //綁定新聞列表 DataTable dt = newNewsManage().SelectByPage(start, end); GridView1.DataSource = dt; GridView1.DataBind(); } }}
效果
僅僅是向大家展示我們具體的一個實現過程,所以頁面樣式這塊我們沒有進行設定,關於資料庫的資訊也是我臨時輸入的,僅僅是為了做實驗用,關於AspNetPager控制項的樣式也有很多,大家可以自己設定。下面就是我們實現的。
總結
到這裡呢,利用我們的AspNetPager控制項就實現了我們的真分頁的功能,它可以大大提高我們的網站或系統的處理效率。關於AspNetPager控制項是我們牛腩視頻裡講到的,不過它裡面並沒有具體實現,只是提了下這個控制項的好處。我們在平常學習中就是要發揚這種行動下移的風格,它提到了,我們就要實現,要跟自己較真。