但在實作上,通常不會使用此內建功能
通常我會搭配AspNetPager這種套件使用
此套件在官方網站都有很詳細的說明(簡中)
甚至有sample source可以下載,故在此不再說明
在資料來源時,可以使用以下的Function將DataTable做簡易的分頁處理
(其實這篇是要讓我換新專案時方便複製貼上而已 XD)
///將DataTable進行分頁 /// 原DataTable /// 選擇第N頁 /// 每頁的頁數 ///新DataTable public DataTable GetPagedTable(DataTable dt, int PageIndex, int PageSize) { if (PageIndex == 0) { return dt; } DataTable NewDt = dt.Copy(); NewDt.Clear(); //起始列 int rowbegin = (PageIndex - 1) * PageSize; //結束列 int rowend = PageIndex * PageSize; if (rowbegin >= dt.Rows.Count) { return NewDt; } if (rowend > dt.Rows.Count) { rowend = dt.Rows.Count; } //產生新的DataTable for (int i = rowbegin; i <= rowend - 1; i++) { DataRow newdr = NewDt.NewRow(); DataRow dr = dt.Rows[i]; foreach (DataColumn column in dt.Columns) { newdr[column.ColumnName] = dr[column.ColumnName]; } NewDt.Rows.Add(newdr); } return NewDt; }
使用方式很簡單:
DataTable Old_dt = GetData();//至DB抓資料,在此省略 DataTable New_dt = GetPagedTable(Old_dt,NowIndex,PageSize); grid_data.Datasource = New_dt;//繫結至GridView grid_data.DataBind();
記得將Gridview的EnableViewState屬性設定為false
因我們已經不需要那些肥大的ViewState了 此function在面對資料量不大時,是很方便的做法, 但如果資料量很大,就不建議,
畢竟此方法還是把所有資料抓回來再做分頁處理
可以考慮在DB使用Row_Number()的方式處理
謝謝您的分享教學,我受益良多!!
回覆刪除您過獎了,大家一起討論學習囉 ^_^
刪除