* ADO.NET中DataTable 分頁*
/// <summary>
/// DataTable分頁并取出指定頁碼的資料
/// </summary>
/// <param name="dtAll">DataTable</param>
/// <param name="pageNo">頁碼,注意:從1開始</param>
/// <param name="pageSize">每頁條數</param>
/// <returns>指定頁碼的DataTable資料</returns>
private DataTable getOnePageTable(DataTable dtAll, int pageNo, int pageSize)
{
var totalCount = dtAll.Rows.Count;
var totalPage = getTotalPage(totalCount, pageSize);
var currentPage = pageNo;
currentPage = (currentPage > totalPage ? totalPage : currentPage);//如果PageNo過大,則較正PageNo=PageCount
currentPage = (currentPage <= 0 ? 1 : currentPage);//如果PageNo<=0,則改為首頁
//----克隆表結構到新表
var onePageTable = dtAll.Clone();
//----取出1頁資料到新表
var rowBegin = (currentPage - 1) * pageSize;
var rowEnd = currentPage * pageSize;
rowEnd = (rowEnd > totalCount ? totalCount : rowEnd);
for (var i = rowBegin; i <= rowEnd - 1; i++)
{
var newRow = onePageTable.NewRow();
var oldRow = dtAll.Rows[i];
foreach (DataColumn column in dtAll.Columns)
{
newRow[column.ColumnName] = oldRow[column.ColumnName];
}
onePageTable.Rows.Add(newRow);
}
return onePageTable;
}
/// <summary>
/// 傳回分頁後的總頁數
/// </summary>
/// <param name="totalCount">總記錄條數</param>
/// <param name="pageSize">每頁顯示條數</param>
/// <returns>總頁數</returns>
public int getTotalPage(int totalCount, int pageSize)
{
var totalPage = (totalCount / pageSize) + (totalCount % pageSize > 0 ? 1 : 0);
return totalPage;
}