專案使用 DataList 控件,需要自定義分頁功能。參考 Google 經典分頁風格,在網上資料基礎上修改優化,實現一個純字符串輸出的分頁生成器,可直接配合 Label 或 LiteralControl 使用。
///
/// 類似 Google 的分頁函數
///
/// 總記錄數
/// 每頁記錄數
/// 當前頁數
/// URL 參數
private string Pagination(int total, int per, int page, string query_string)
{
int allpage = 0, next = 0, pre = 0, startcount = 0, endcount = 0;
string pagestr = "";
// 邊界修正
if (page < 1) page = 1;
// 計算總頁數
if (per != 0)
{
allpage = total / per;
allpage = (total % per != 0) ? allpage + 1 : allpage;
allpage = (allpage == 0) ? 1 : allpage;
}
next = page + 1;
pre = page - 1;
// 中間頁起始序號:當前頁為中心,前後各 5 頁
startcount = (page + 5) > allpage ? allpage - 9 : page - 4;
// 中間頁終止序號
endcount = page < 5 ? 10 : page + 5;
if (startcount < 1) startcount = 1;
if (allpage < endcount) endcount = allpage;
pagestr = $"共 {allpage} 頁 ";
// 首頁、上一頁
pagestr += page > 1
? $"首頁 上一頁"
: "首頁 上一頁";
// 中間頁碼區間
for (int i = startcount; i <= endcount; i++)
{
pagestr += page == i
? $" {i}"
: $" {i}";
}
// 下一頁、末頁
pagestr += page != allpage
? $" 下一頁 末頁"
: " 下一頁 末頁";
return pagestr;
}
// 頁面載入時調用
string pageHtml = Pagination(totalRecords, pageSize, currentPage, "List.aspx");
lblPagination.Text = pageHtml;
// 或
this.Controls.Add(new LiteralControl(pageHtml));