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 //倒序排列
}
}
}