項目一直都是用的存儲過程分頁的
今天做了一個功能 用到了翻頁 但是代碼都是一模一樣的 用到此功能上 翻頁就是異常 每次翻頁對象都是亂套的
調試查看數據庫返回結果都是正確的數據 翻頁功能還是封裝編譯了 無奈之下 自己編寫此DataTable對象的翻頁功能
能用存儲過程分頁的 一定要用存儲過程 因為DataTable分頁是要把數據全部從數據庫讀取出來再進行處理的 太消耗資源 得不償失
代碼入下
// ===================================================================
// 創建時間:2012年2月22日, PM 02:53:02
// 描述:DataTable翻頁功能
// ===================================================================
using System.Data;
namespace Pagination
{
public static class DataTablePagination
{
/// <summary>
/// DataTable翻頁功能
/// </summary>
/// <param name="dt">數據源</param>
/// <param name="PageIndex">當前頁</param>
/// <param name="PageSize">每頁顯示多少條數據</param>
/// <returns>返回處理后的數據</returns>
public static DataTable GetDataTablePagination(this DataTable dt, int PageIndex, int PageSize)
{
//如果不是有效參數 返回null
if (dt == null || dt.Rows.Count == 0 || PageSize <= 0 || PageIndex < 0)
{
return null;
}
//如果總數小於分頁數直接返回數據
if (dt.Rows.Count <= PageSize)
{
return dt;
}
int _totalCount = 0;
_totalCount = dt.Rows.Count / PageSize;
if (dt.Rows.Count % PageSize > 0)
{
_totalCount++;
}
PageIndex++;
for (int i = 1; i < PageIndex; i++)
{
dt = RemoveDataTableRows(dt, 0, PageSize);
}
return GetDataTableRows(dt, 0, PageSize);
}
/// <summary>
/// 根據數據表 指定 行數的索引值 刪除指定的行個數
/// </summary>
/// <param name="dt">要操作的數據表</param>
/// <param name="rowIndex">開始刪除的行號(行索引值)</param>
/// <param name="num">刪除行數</param>
/// <returns>返回處理后的數據表</returns>
public static DataTable RemoveDataTableRows(DataTable dt, int rowIndex, int num)
{
if (dt == null || dt.Rows.Count == 0 || rowIndex < 0 || num < 0)
{
return dt;
}
for (int i = 0; i < dt.Rows.Count; i++)
{
if (i == rowIndex)
{
for (int j = 0; j < num; j++)
{
dt.Rows.RemoveAt(rowIndex);//.Rows[].Delete();
}
break;
}
}
return dt;
}
/// <summary>
/// 根據數據表 指定 行數的索引值 獲取指定的行個數數據
/// </summary>
/// <param name="dt">要操作的數據表</param>
/// <param name="rowIndex">開始獲取數據的行號(行索引值)</param>
/// <param name="num">獲取的行數</param>
/// <returns>返回處理后的數據表</returns>
public static DataTable GetDataTableRows(DataTable dt, int rowIndex, int num)
{
if (dt == null || dt.Rows.Count == 0 || rowIndex < 0 || num < 0)
{
return dt;
}
DataTable dt1 = new DataTable();
dt1 = dt.Clone();
for (int i = 0; i < dt.Rows.Count; i++)
{
if (i == rowIndex)
{
for (int j = 0; j < num; j++)
{
if (i + j + 1 <= dt.Rows.Count)
{
dt1.Rows.Add(dt.Rows[rowIndex + j].ItemArray);
}
}
break;
}
}
return dt1;
}
}
}