基於 PagedDataSource 實作,適合入門學習,邏輯直觀但效能一般 (大數據量建議改用 SQL 分頁)。
public PagedDataSource GetPagedDataSource(DataSet MyDataSet, int PageSize, int PageNum, string AspxName, Label PageLable)
{
PagedDataSource PDS = new PagedDataSource();
PDS.AllowPaging = true;
PDS.PageSize = PageSize;
PDS.DataSource = MyDataSet.Tables[0].DefaultView;
int CurrentPage = 0;
if (!string.IsNullOrEmpty(PageNum.ToString()))
CurrentPage = int.Parse(PageNum.ToString());
else
CurrentPage = 1;
PDS.CurrentPageIndex = CurrentPage - 1;
int PageCount = PDS.PageCount;
// 產生分頁導航 HTML (此處為示意字元,實際專案建議用 HyperLink 或 Repeater)
string FirstPage = (PageNum == 1) ? "9" : "9";
string PrevPage = (PageNum == 1) ? "7" : "7";
string NextPage = (PageNum == PageCount) ? "8" : "8";
string LastPage = (PageNum == PageCount) ? ":" : ":";
PageLable.Text = "總記錄: " + PDS.DataSourceCount + " 每頁: " + PageSize + " 總頁數: " + PageCount + "" + FirstPage + " " + PrevPage + " " + NextPage + " " + LastPage + "";
return PDS;
}
// 頁面載入
string MySql = "Select * from C_Company";
int PageNum = (Request.QueryString["Page"] == null) ? 1 : Convert.ToInt32(Request.QueryString["Page"]);
DataSet MyDataSet = MyData.GetDataSet(MySql, 0, 0, "Table");
PagedDataSource PDS = MyData.GetPagedDataSource(MyDataSet, 10, PageNum, Request.CurrentExecutionFilePath + "?", Label1);
this.DataGrid1.DataSource = PDS;
this.DataGrid1.DataBind();
HyperLink 或 Repeater 動態產生,支援 SEO 友善 URL。.ascx) 便於複用。本範例旨在展示 PagedDataSource 基本用法,生產環境請根據效能需求調整。