C# DataTable 生成分页数据

354 阅读1分钟
/// <summary>
/// 分页数据
/// </summary>
[Serializable]
public class PagingDataTable
{
    /// <summary>
    /// 页码
    /// </summary>
    public int pagenumber;
    /// <summary>
    /// 每页大小
    /// </summary>
    public int pagesize;
    /// <summary>
    /// 总数据条数
    /// </summary>
    public int total;
    /// <summary>
    /// 数据
    /// </summary>
    public DataTable data;
}
public static class ExtensionMethods{
    /// <summary>
    /// 生成分页数据
    /// </summary>
    /// <param name="dt"></param>
    /// <param name="PageSize">每页大小</param>
    /// <param name="pageNumber">页码</param>
    /// <returns></returns>
    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) + 1;
        int maxIndex = PageSize * pageNumber; 
        */
        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;
    }

}