介紹
借助 Asp
本文不是講述如何進行數據庫分頁
NOTE
控件組成
為了能迅速提起大家的興趣
x
IUrlManager 接口
想一想如果你在設計一個可重用的分頁用戶控件
public interface IUrlManager
{
int CurrentPageIndex{ get; } // 當前頁碼
string GetPageUrl(int pageIndex); // 根據 頁碼 獲取頁面路徑
}
而實際上
public interface IUrlManager
{
int CurrentPageIndex{ get; } // 當前頁碼
string GetPageUrl(int pageIndex); // 根據 頁碼 獲取頁面路徑
int PageCount { get; } // 總頁數
int RecordCount { get; } // 記錄總數
int PageSize { get; } // 分頁大小
}
要求在 IUrlManager裡實現總頁數PageCount屬性可能有點奇怪
控件本身需要知道總共有多少頁
總頁碼 是根據 記錄數 和 分頁大小 算得的
問題是
DefaultUrlManager 類
現在 所有獲取頁碼 及 根據頁碼獲取路徑 的邏輯都可以放在實現了這個接口的類中
public class DefaultUrlManager : IUrlManager {
private HttpContext context;
private Regex reg;
private string queryParam; // QueryString 參數名稱
private int currentPageIndex; // 當前頁
private int pageCount; // 總頁數
private int recordCount; // 記錄總數
private int pageSize; // 分頁大小
// 構造函數
public DefaultUrlManager(int recordCount
{
if (recordCount <
throw new ArgumentOutOfRangeException(
if (pageSize < =
throw new ArgumentOutOfRangeException(
if (string
throw new ArgumentNullException(
// 設置私有變量
this
this
this
context = HttpContext
string pattern = @
reg = new Regex(pattern
// 如果記錄數為
if (recordCount ==
currentPageIndex =
pageCount =
} else {
// 設置總頁數
double recordCount
double pageSize
pageCount = Convert
// 設置當前頁碼
string queryIndex = context
if (string
currentPageIndex =
else {
try {
currentPageIndex = Math
if (currentPageIndex ==
currentPageIndex =
if (currentPageIndex > pageCount)
currentPageIndex = pageCount;
}
catch {
currentPageIndex =
}
}
}
}
// 默認以
public DefaultUrlManager(int recordCount
// 默認以
public DefaultUrlManager(int recordCount
// 默認以
public DefaultUrlManager(int recordCount) : this(recordCount
public string GetPageUrl(int pageIndex) {
string pageUrl = context
// 如果找到匹配
// 則對後面的數值進行替換
if (reg
pageUrl = reg
} else {
string queryString = context
if (string
pageUrl +=
else
pageUrl +=
}
return pageUrl;
}
public int CurrentPageIndex
{
get { return currentPageIndex; }
}
public int PageCount
{
get { return pageCount; }
}
public int RecordCount
{
get { return recordCount; }
}
public int PageSize
{
get { return pageSize; }
}
}
Pager
由於我們的鏈接是動態生成的
From:http://tw.wingwit.com/Article/program/net/201311/11307.html