sort page 排序和分页的小例子
更新时间:2020年6月25日 11:41 点击:2267
复制代码 代码如下:
/* 系统名: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 //倒序排列
}
}
}
上一篇: C# 骑士飞行棋的源码(分享)
下一篇: 深入线程安全容器的实现方法
相关文章
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- 这篇文章主要介绍了matlab中 sort 函数用法 的相关资料,需要的朋友可以参考下...2016-03-22
- 这篇文章主要为大家详细分享了laypage分页控件使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-05-20
- 这篇文章主要介绍了C# PDF Page操作设置页面切换按钮的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
Lua的table库函数insert、remove、concat、sort详细介绍
这篇文章主要介绍了Lua的table库函数insert、remove、concat、sort详细介绍,本文分别给出了这几个函数的使用实例,需要的朋友可以参考下...2020-06-30- sort() 方法用于对数组的元素进行排序。接下来通过本文给大家介绍Sort()函数的多种用法,对sort函数的用法相关知识感兴趣的朋友一起学习...2016-03-22
- 这篇文章主要介绍了C#中Arraylist的sort函数用法,较为详细的分析了ArrayList的sort函数的功能、定义及具体使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 花了一上午时间,终于写了一个进行排序并且分页的类,下面将代码贴出来,望大家指正。...2020-06-25
- php arsort函数用于将数组中的元素按照降序进行排序,如果排序成功则返回true,否则返回false,本文章向大家讲解arsort函数的基本语法及使用实例,需要的朋友可以参考下...2016-11-22
- TabPage没有Visible属性,所以只能通过设置将其与父控件(tabcontrol)的关联性去除就好了,如下面代码:...2020-06-25
- 这篇文章主要介绍了C语言中qsort函数用法,包括了针对各种数据类型参数的排序,非常具有实用价值,需要的朋友可以参考下...2020-04-25
- sort函数是标准模板库的函数,已知开始和结束的地址即可进行排序,可以用于比较任何容器(必须满足随机迭代器),任何元素,任何条件,执行速度一般比qsort要快...2020-04-25
- 这篇文章主要介绍了页面编码codepage=936和65001的区别,需要的朋友可以参考下...2021-09-22
mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解决方法
这篇文章主要介绍了mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解决方法,需要的朋友可以参考下...2016-05-20- 这篇文章主要介绍了JS sort排序详细使用方法示例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-27
- 这篇文章主要介绍了Java使用DualPivotQuicksort排序,喜欢算法的同学一定要看一下...2021-04-09
PHP数组函数array_multisort()用法实例分析
这篇文章主要介绍了PHP数组函数array_multisort()用法,结合实例形式详细分析了array_multisort函数的功能,定义及进行数组排序过程中的使用技巧,需要的朋友可以参考下...2016-04-07- 这篇文章主要介绍了C# 中的List.Sort()--集合排序方法全面解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-15
- 下面小编就为大家带来一篇模拟javascript中的sort排序(简单实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-08-24
- 这篇文章主要介绍了让你的PHP7更快之Hugepage用法,较为详细的分析了php7中Hugepage的功能与具体的设置技巧,需要的朋友可以参考下...2016-06-12