sort page 排序和分页的小例子
发布时间:2022-07-31 23:08:37
标签:sort,page
/* 系统名: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 //倒序排列
}
}
}
0
投稿
猜你喜欢
- 本文实例为大家分享了UGUI绘制平滑曲线的具体代码,供大家参考,具体内容如下绘制实现自定义的MaskableGraphic挂载在UGUI的U
- 目录Emit异常处理流程 显示Exception对象的Message属性 返回目录 Emit异常处理流程来看这种C#异常处理代码: 
- 一般在实际项目的开发中,会要求涉及日志记录的问题,比较常用的有Log4Net,NLog等几个,而小项目小工具的话,则无需费此大驾。而譬如串口
- Lombok有什么用在我们实体Bean中有大量的Getter/Setter方法以及toString, hashCode等可能不会用到,但是某
- C# 3.0为你提供了对象集合初始化器:/// <summary>/// 图书类/// </summary>publ
- 本文实例讲述了Android播放assets文件里视频文件相关问题。分享给大家供大家参考,具体如下:今天做了一个功能,就是播放项目工程里面的
- Spring 基于注解启动主要有两个Class实现注解启动AnnotationConfigApplicationContextAnnotat
- 要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题,我按照这思路去大概实现了一下。1.使用ht
- java8 Stream大数据量List分批处理//按每3个一组分割private static final Integer MAX_NUM
- 1 * * 是Spring中的概念,和过滤器类似,可以对用户请求进行拦截过滤处理。但是相对于过滤器而言, * 要的控制更加的细节, *
- fifter、servlet、interceptorfifter用来处理请求头、请求参数、编码的一些设置,然后转交给servlet,处理业务
- 一.前言在日常的开发中,经常需要对方法参数进行校验(非空、长度等)。如果采用hardcode去校验(if..else..),会造成代码冗余,
- spring.thymeleaf.cache=false不起作用配置是清除缓存,实现热部署。也就是修改了html后不用重启,刷新页面就能看到
- 前言:本文主要介绍内容有:一个串行调用的例子(App首页信息查询)CompletionService实现并行调用抽取通用的并行调用方法代码思
- 把SpringBoot项目打包成Docker镜像有两种方案:全自动化:先打好docker镜像仓库,然后在项目的maven配置中配置好仓库的地
- 一、自动装配1、四种类型的自动装配类型解释xml 配置byName根据 Bean 的 name 或者 id<bean id=”bean
- 一、获取企业微信群机器人 Webhook 地址业务需要在企业微信推送告警监控或者定时提醒业务,就可以使用企业微信自带的机器人工具Webhoo
- 第一篇是纯利用现有JDK提供的绘图类(ImageIO)类制作,这个过程比较复杂且需要了解ImageIO类。这一篇文章是利用Hutool工具类
- 一、基本概念(重要)Integer 是 int 的包装类,int 则是 java 的一种基本数据类型;Integer 变量必须实例化后才能使
- 本文介绍了spring cloud Feign使用中遇到的问题总结,分享给大家,具体如下:问题一:在前面的示例中,我们讲过@RequestM