[Serializable]
public class PagingDataTable
{
public int pagenumber;
public int pagesize;
public int total;
public DataTable data;
}
public static class ExtensionMethods{
public static PagingDataTable ToPagingData(this DataTable dt, int PageSize, int pageNumber) {
PagingDataTable pd = new PagingDataTable();
pd.pagenumber = pageNumber;
pd.pagesize = PageSize;
pd.total = dt.Rows.Count;
if (pageNumber < 1)
{
pageNumber = 1;
}
int minIndex = PageSize * (pageNumber - 1);
int maxIndex = PageSize * pageNumber - 1;
int rowMaxIndex = (pd.total - 1) >= maxIndex ? maxIndex : (pd.total - 1);
using (DataTable pageTable = dt.Clone())
{
pageTable.Columns.Add("__index__", typeof(int));
for (int i = minIndex; i <= rowMaxIndex; i++)
{
DataRow pageRow = pageTable.NewRow();
DataRow dRow = dt.Rows[i];
foreach (DataColumn column in dt.Columns)
{
pageRow[column.ColumnName] = dRow[column.ColumnName];
}
pageRow["__index__"] = i + 1;
pageTable.Rows.Add(pageRow);
}
pd.data = pageTable;
}
return pd;
}
}