在ASP.NET Gridview雖然內建就有開啟分頁的功能,
但在實作上,通常不會使用此內建功能
通常我會搭配AspNetPager這種套件使用
此套件在官方網站都有很詳細的說明(簡中)
甚至有sample source可以下載,故在此不再說明
在資料來源時,可以使用以下的Function將DataTable做簡易的分頁處理
/// <summary> 將DataTable進行分頁 </summary>
/// <param name="dt"> 原DataTable
/// <param name="PageIndex"> 選擇第N頁
/// <param name="PageSize"> 每頁的頁數
/// <returns> 新DataTable</returns>
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();
抱歉
這樣會變慢喔
在抓資料時, 最好能在資料從資料庫取出時
就用SQL處理掉資料分頁
會比較好
如果你的ASP.NET與SQL不在同一台的話
如果遇到大資料的話
你原本的寫法
效能會耗在傳輸一堆沒有要顯示的資料上
我以前用的, 給你參考
GridViewWithPager(SQL預存程序分頁)
謝謝前輩提醒,我後來發現我文章少了一段,剛剛又找不到文章編輯的功能Orz,故補充再下面
再次謝謝您的範例 ^__^
--補充--
記得將Gridview的EnableViewState屬性設定為false
因我們已經不需要那些肥大的ViewState了 此function在面對資料量不大時,是很方便的做法, 但如果資料量很大,就不建議,
畢竟此方法還是把所有資料抓回來再做分頁處理
可以考慮在DB使用Row_Number()的方式處理