sort page 排序和分页的小例子

 更新时间:2013年05月08日 11:05:10   作者:  
花了一上午时间,终于写了一个进行排序并且分页的类,下面将代码贴出来,望大家指正。
复制代码 代码如下:

/* 系统名:SaleManage
* 模块名:SortPags
* 模块说明:排序分页类(传入DataTable,及相关信息,然后分页,并排序)
* 开发者:Peter Luo
* 开发时间:2012年4月6日
*/
using System;
using System.Collections.Generic;
using System.Linq;
 using System.Text;
 using System.Data ;

 namespace Sale_Core
 {
 public class SortPags
 {
 ///
 /// 存储传入的数据
 ///
 private DataTable _DtSource = null;
 private DataView _DvSource = null;

 ///
 /// 分页排序类
 ///
 /// 要分页或排序的数据源
 public SortPags(DataTable dt)
 {
 this._DtSource = dt;
 }

 ///
 /// 分页排序类
 ///
 /// 要分页或排序的数据源
 public SortPags(DataView dv)
 {
 this._DvSource = dv;
 }

 ///
 /// 页面总数
 ///
 private int _PageCount;

 ///
 /// 每页记录数量
 ///
 private int _PageSiz;

 ///
 /// 记录总数
 ///
 private int _RowCount;

 ///
 /// 排序类型
 /// ASC 升序
 /// DESC 降序
 ///
 private SortType _SortKind;

 ///
 /// 记录当前页面Index
 ///
 private int _CurrentPageIndex;

 ///
 /// 数据源
 ///
 public DataTable DtSource
 {
 get
 {
 return _DtSource;
 }
 }

 ///
 /// 页面数量
 ///
 public int PageCount
 {
 get
 {
 return _PageCount;
 }
 }

 ///
 /// 页面显示数量
 ///
 public int PageSize
 {
 get
 {
 return _PageSiz;
 }
 set
 {
 _PageSiz = value;
 }
 }

 ///
 /// 只读、不能写,获取该数据源那数据总数
 ///
 public int RowCount
 {
 get
 {
 return _RowCount;
 }
 }

 public SortType SortKind
 {
 get
 {
 return _SortKind;
 }
 set
 {
 _SortKind = value;
 }
 }

 ///
 /// 记录当前页面Index
 ///
 public int CurrentPageIndex
 {
 get
 {
 return _CurrentPageIndex;
 }
 }

 public DataView Sort(string sortName, SortType sortKind)
 {
 return new DataView();
 }

 ///
 /// 获取按照给定字段分页后的制定页,(排序->分页)
 ///
 /// 传入排序的字段
 /// 排序的类型:SortType.ASC 升序 SortType.DESC 降序
 /// 页面的大小(页面内要显示的记录的数量)
 /// 当前页面的index
 ///
 public DataTable GetCurrentPageSortByFileName(string sortName, SortType sortKind, int pageSize, int currentPageIndex)
 {
 if (pageSize == 0)
 return DtSource;//如果没有填写pagesize那么返回整个数据源
 if (currentPageIndex <= 0)
 return DtSource; //如果没有传入当前页面index,则返回整个数据源
 if (sortName == "")
 return GetCurrentPage(pageSize, currentPageIndex);//如果排序字段没写,则只有分页,不进行排序

 DataView dv = new DataView(DtSource);
 switch (sortKind)
 {
 case SortType.DESC :
 dv.Sort = sortName + "DESC";
 break;
 case SortType .ASC :
 dv.Sort = sortName + "ASC";
 break;
 default :
 break;
 }

 _PageSiz = pageSize;
 _CurrentPageIndex = currentPageIndex;

 this._RowCount = this.DtSource.Rows.Count;
 this._PageCount = this.RowCount / this.PageSize;
 if (_PageCount * PageSize < RowCount) //如果计算出的页面数*页面上的数据量小于记录数,那么页面大小自动+1
 {
 _PageCount++;
 }

 int currentBeginRowIndex = pageSize * (currentPageIndex - 1); //当前页面的开始行
 int currentEndRowIndex = pageSize * currentPageIndex - 1;//当前页面的结束行
 DataTable dtRes = _DtSource.Clone(); //复制数据源表结构
 for (int i = currentBeginRowIndex; i <= currentEndRowIndex; i++) //复制当前页面的数据到新的datatable中
 {
 if (i >= DtSource.Rows.Count)
 break; //当前页面的记录小于该页面应该显示的记录时,就只取当前页面中的数据
 DataRow dr = dtRes.NewRow();
 for (int j = 0; j < _DtSource.Columns.Count; j++)
 {
 dr[j] = dv[i][j];
 }
 dtRes.Rows.Add(dr);
 }
 return dtRes;
 }

 ///
 ///
 ///
 /// 每页面大小(每个页面上记录的数量)
 /// 当前页面索引
 ///
 public DataTable GetCurrentPage(int pageSize, int currentPageIndex)
 {
 if (pageSize ==0)
 {
 return DtSource;//如果没有填写pagesize那么返回整个数据源
 }
 if (currentPageIndex <= 0)
 {
 return DtSource;//如果没有传入当前页面index,则返回整个数据源
 }
 _PageSiz = pageSize;

 _CurrentPageIndex = currentPageIndex;
 this._RowCount = this.DtSource.Rows.Count;
 this._PageCount = this.RowCount / this.PageSize;
 if (_PageCount * PageSize < RowCount) //如果计算出的页面数*页面上的数据量小于记录数,那么页面大小自动+1
 _PageCount++;
 int CurrentBeginRowIndex = PageSize * (currentPageIndex - 1); //当前页面的开始行
 int CurrentEndRowIndex = PageSize * currentPageIndex - 1; //当前页面的结束行
 DataView dv;
 if (_DvSource == null)
 dv = new DataView(DtSource);
 else
 dv = _DvSource;
 DataTable dtRes = _DtSource.Clone(); //复制数据源表结构
 for (int i = CurrentBeginRowIndex; i <= CurrentEndRowIndex; i++) //复制当前页面的数据到新的datatable中
 {
 if (i >= DtSource.Rows.Count) break; //当前页面的记录小于该页面应该显示的记录时,就只取当前页面中的数据
 DataRow dr = dtRes.NewRow();
 for (int j = 0; j < _DtSource.Columns.Count; j++)
 {
 dr[j] = dv[i][j];
 }
 dtRes.Rows.Add(dr);
 }
 return dtRes;
 }
 public enum SortType
 {
 ASC, //升序排列
 DESC //倒序排列
 }
 }
 } 

相关文章

  • Unity色子的投掷和点数的获得详析

    Unity色子的投掷和点数的获得详析

    这篇文章主要给大家介绍了关于Unity色子的投掷和点数的获得的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • C#中List和SortedList的简介

    C#中List和SortedList的简介

    今天小编就为大家分享一篇关于C#中List和SortedList的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • C#调用Oracle存储过程的方法

    C#调用Oracle存储过程的方法

    这篇文章主要介绍了C#调用Oracle存储过程的方法,包含数据库及C#对应的调用代码,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • C# List的赋值问题的解决

    C# List的赋值问题的解决

    本文主要介绍了C# List的赋值问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 详解C# winform ListView的基本操作

    详解C# winform ListView的基本操作

    本文主要介绍了C# winform ListView的基本操作,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C#异常捕获机制图文详解

    C#异常捕获机制图文详解

    在本文中我们给大家分享了关于C#异常捕获机制的相关知识点内容,有兴趣的朋友们学习下。
    2019-02-02
  • C#使用Directoryinfo类获得目录信息和属性的方法

    C#使用Directoryinfo类获得目录信息和属性的方法

    这篇文章主要介绍了C#使用Directoryinfo类获得目录信息和属性的方法,涉及C#操作目录的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • c#友好显示日期 c#日期datetime使用方法

    c#友好显示日期 c#日期datetime使用方法

    c# datetime根据日期显示几秒前、几分前、几天前、几月前、几年前等格式
    2014-01-01
  • C#中Arraylist的sort函数用法实例分析

    C#中Arraylist的sort函数用法实例分析

    这篇文章主要介绍了C#中Arraylist的sort函数用法,较为详细的分析了ArrayList的sort函数的功能、定义及具体使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • C# 设计模式系列教程-命令模式

    C# 设计模式系列教程-命令模式

    在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
    2016-06-06

最新评论