欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sort page 排序和分页的小例子

程序员文章站 2023-12-16 17:08:16
复制代码 代码如下:/* 系统名:salemanage* 模块名:sortpags* 模块说明:排序分页类(传入datatable,及相关信息,然后分页,并排序)* 开发者...
复制代码 代码如下:

/* 系统名: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 //倒序排列
 }
 }
 } 

上一篇:

下一篇: