標籤:aspnetpager gridview
在牛腩視頻中的最後一集,涉及到了一個外部控制項AspNetPager實現分頁記錄顯示的一個小例子沒有完成,據瞭解分頁顯示功能在軟體設計中是很重要的一個功能,因此,在這裡講未完成的工作完成。
在視頻中講到,gridview的分頁功能屬於假分頁,為什麼呢?因為每次分頁必須查詢完資料庫中所有的記錄,這樣如果資料量過大,將會造成很大不便。所以選擇了AspNetPager這個控制項。
其實,這個控制項只是提供了一個分頁功能,它並不能顯示資料,因此,它還是需要與gridview結合起來使用才可以完全實現我們分頁的這個功能。
當然gridview這個控制項的使用,視頻中有用到,但是由於多次複製粘貼的緣故,到後來很難回憶出當時到底是如何使用的了。其實這個控制項主要有這麼幾個關鍵注意的點,如下:
1、在編輯列時,由於過長代碼,可選擇在設計檢視中進行編輯
2、若想與css結合設計表格的樣式,可將列轉換為自訂模板列如所示:
3、autogenericcolumns這個屬性的應用
好了,瞭解了控制項使用後,我們就來利用它們實現分頁製作吧!
首先,通過預存程序來編寫資料庫查詢語句,如下:
ALTER PROCEDURE [dbo].[partPage]@startIndex int, --查詢開始記錄數@endIndex int --結束記錄數ASBEGINwith temptbl as (SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS 行號, * from news --使得記錄按順序排列,按行號查詢)SELECT * FROM temptbl where 行號 between @startIndex and @endIndexEND
編寫完預存程序後,便是D層要寫的代碼,如下:
public DataTable SelectByPage(int startIndex,int endIndex) { DataTable dt = new DataTable(); string cmdText = "partPage"; SqlParameter[] paras = new SqlParameter[]{ new SqlParameter ("@startIndex",startIndex ), new SqlParameter ("@endIndex",endIndex ) }; dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure); return dt; }
sqlhelper中的代碼不便,如下:
/// <summary> /// 執行帶參數的查詢語句 /// </summary> /// <param name="sql">sql語句</param> /// <param name="paras">參數</param> /// <returns>datatable</returns> public DataTable ExecuteQuery(string cmdText,SqlParameter []paras,CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdText , GetConn()); cmd.Parameters.AddRange(paras); cmd.CommandType = ct; using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } return dt; }
好了,後台大部分工作已準備齊全,就只剩U層代碼了:
聲明:在這裡是按照視頻中那樣在設計中指定了每頁顯示5條新聞,如果在代碼中寫也是可以的,可以寫入asp.pagesize=5;
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack ) { DataTable dt = new DataTable(); dt = new NewsManager().SelectAll();//選擇所有新聞 anp.RecordCount = dt.Rows.Count; //記錄總數 //開始綁定記錄 int startIndex=anp.StartRecordIndex ; //開始記錄數 int endIndex=anp.EndRecordIndex ; //結束記錄數 dt = new NewsManager().SelectByPage(startIndex, endIndex); gvNews.DataSource = dt; gvNews.DataBind(); } } protected void anp_PageChanged(object sender, EventArgs e) { Response.Write("開始記錄數為:" + anp.StartRecordIndex + "結束記錄數為:" +anp.EndRecordIndex ); }
好了,至此,基本上的架構就已經實現了,那麼我們來看一下效果吧!
看著還不錯吧???
AspNetPager分頁記錄顯示執行個體