在做程序时经常遇到要将反复对数据进行筛选、求和、排序、分页等的情况。每次的数据操作都要去访问数据库很明显是不合理的!当然需要实时数据的情况除外,不做讨论哈。今天无意间在网上看到了这篇文章,挺实用的,拿来记忆一下
一、排序
1 获取DataTable的默认视图
2 对视图设置排序表达式
3 用排序后的视图导出的新DataTable替换就DataTable
(Asc升序可省略,多列排序用","隔开)
DataView dv = dt.DefaultView;
dv.Sort = "id Asc,name Desc";
dt = dv.ToTable();
二、检索
1 设置查询字符串
2 使用Select方法获取到所有满足条件的数据行对象数组
(多项查询条件间,用and隔开.模糊查询使用 like %)
DataRow[] matches = dt.Select("(id>=20) and (title='会议') and (yearstr like ' 07%')");
string strName = matches[0]["name"].ToString();
另外也可以用下面这种方法,将检索出来的新表绑定到GridView
DataView dv = dt.DefaultView;
dv.RowFilter = "id>=2";
this.GridView1.DataSource = dv;
this.GridView1.DataBind();
三、合并
假定有2个DataTable:Dt1 , Dt2。表结构一样
将Dt2接在Dt1后可采用此方法
dt1.Merge(dt2);
四、分页
PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;
pds.DataSource = dvIntegralExpense;
pds.AllowPaging = true;
pds.PageSize = pager.PageSize;
pds.CurrentPageIndex = pager.PageIndex;
rptIntegralExpense.DataSource = pds;
rptIntegralExpense.DataBind();
五: 我们在使用Sql Server这些数据库时,可以轻松的通过Sum、Aver、Count等统计出相关结果,那么,在已经把数据检索出来的DataSet(DataTable)中呢?特别是通过Web Service获得了DataSet,这个时候,可是没有办法回头去修改Select语句来获取这些统计了。那么在DataSet/DataTable中是否可以进行统计呢?答案是肯定的。
在MSDN中,有一篇MS推荐的统计方法,就是逐行对数据进行求和统计,这个方法,其实有等于无(或许这个方法只是针对于DataGrid求取小计用吧),因为这个方法中采用的是DataGrid的ItemDataBind事件来对数据进行累加,同我们手动写代码统计没有什么区别。
本文介绍一个简单的方法,不需要逐条记录进行计算就可以轻松的获得DataTable中的记录统计结果。这个简单的方法就是调用功能强大的DataTable的函数Compute。
一、调用说明(仅以C#为例,下同):
  public object Compute(string strExpression,string strFilter)
  参数:
  strExpression:要计算的表达式字符串,基本上类似于Sql Server中的统计表达式
  strFilter:统计的过滤字符串,只有满足这个过滤条件的记录才会被统计
二、调用举例:
  以下示例,假设一个产品销售表table,描述某商场中各促销员销售的实际记录,包含字段为:姓名(Name)、性别(Sex,0为女,1为男)、生日(Birthday)、销售产品的代码(ProID)、销售的数量(Quantity)、销售价格(Price)。
  1.统计所有性别为女的销售员的数量:
  table.Compute("Count(*)","Sex=0");
  2.统计所有销售员中年龄大于20岁的
  table.Compute("Count(*)","Birthday<'"+today);//today为今天的日期字符串
  3.统计销售产品的平均价格
  table.Compute("Aver(Price)","true");
  4.统计产品代码为1的产品销售数量:
  table.Compute("Sum(Quantity)","ProID=1");
  5.统计所有产品的销售总金额:
  要统计总销售金额,由于table中不存在某项产品某个促销员销售的金额数据,但我们可以通过Quantity*Price来获得。比如:
  table.Compute("Sum(Quantity*Price)","true");
  这里一个问题是:DataTable的统计功能没有SqlServer强,这个统计是错误的,因为Compute的统计不具备Sum(Quantity*Price)这样数据的功能。那怎么办呢?对于这样复杂数据的统计,我们可以在DataTable中创建一个新的字段来完成,比如Amount,同时设置该字段的Expression为Quantity*Price,这样我们就可以使用统计功能了:table.Compute("Sum(Amount)","true");

DataTable数据进行排序、检索、合并、分页、统计的更多相关文章

  1. 《MySQL必知必会》检索数据,排序检索数据(select ,* ,distinct ,limit , . , order by ,desc)

    <MySQL必知必会>检索数据,排序检索数据 1.检索数据 1.1 select 语句 为了使用SELECT检索表数据,必须至少给出两条信息一想选择什 么,以及从什么地方选择. 1.2 检 ...

  2. 【SQL必知必会笔记(2)】检索数据、排序检索数据

    上个笔记中介绍了一些关于数据库.SQL的基础知识,并且创建我们后续练习所需的数据库.表以及表之间的关系,从本文开始进入我们的正题:SQL语句的练习. 文章目录 1.检索数据(SELECT语句) 1.1 ...

  3. datatable,查询,排序,复制等操作

    DataTable排序,检索,合并详解 一.排序 获取DataTable的默认视图 对视图设置排序表达式 用排序后的视图导出的新DataTable替换就DataTable (Asc升序可省略,多列排序 ...

  4. C#对DataTable里数据筛选排序的方法

    在日常开发过程中,有一个DataTable集合,里面有很多字段,现在要求针对某一列进行排序,如果该列为数字的话,进行ASC即可实现,但是该字段类型为string,此时排序就有点不正确了 protect ...

  5. springboot2.0 集成elasticsearch,实现检索、分页、排序

    springboot整合es的方式: transport方式(7.0弃用,8.0移除) spring-data(完全当做数据库来用,无法全部支持es,内部也是基于transport,包装后使用非常简单 ...

  6. mysql必知必会(四、检索数据,五、排序检索数据,六、过滤数据,七、数据过滤)

    四.select语句 1.检索单个列 select prod_name from products; 2.检索多个列 select prod_name, prod_price from product ...

  7. 2.排序检索数据 ---SQL

    order by 一.排序数据 SELECT prod_name FROM Products ORDER BY prod_name; ORDER BY子句的位置 在指定一条ORDER BY子句时,应该 ...

  8. mysql必知必会--排序检索数据

    排序数据 其实,检索出的数据并不是以纯粹的随机顺序显示的.如果不排 序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初 添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺 序将会受 ...

  9. mysql排序,可以对统计的数据进行排序

    sql SELECT a.*,b.name as address_name,b.tel as address_tel,b.province as address_province,b.city as ...

随机推荐

  1. Input

    Input Basic Input Old Input Files Please note that both Input and Request do NOT sanitize your data, ...

  2. String使用equals方法和==分别比较的是什么?

    equals方法和==的区别   首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用.这里指的作为一个基本类型来使用只是指使用方法上的,比如String s = &quo ...

  3. Linux 学习笔记 基本的bash shell命令

    Linux 文件系统 Linux讲文件存储在单个目录结构(虚拟目录)中,虚拟目录包含了安装在PC上的所有存储设备的文件路径. Linux虚拟目录中比较复杂的部分是它如何来协调管理各个存储设备.Linu ...

  4. 萌货猫头鹰登录界面动画iOS实现分析

    动画效果仿自国外网站readme.io的登录界面,超萌可爱的猫头鹰,具体效果如下图所示. 动画实现核心: 动画核心的是用到了iOS中UIView的transform属性,然后根据尺寸坐标对四张图片进行 ...

  5. IIS 之 添加MIME扩展类型及常用的MIME类型列表

    经常用IIS作为下载服务器的时候有时传上去的文件比如 example.mp4 文件名上传后,但是用http打开的时候确显示为 404 文件不存在.其实是IIS对文件的一种保护,不在IIS指定的MIME ...

  6. 在oc代码中使用swift第三方框架

    swift现在使用越来越多了,一些主流的框架或者效果比较好的demo都陆陆续续使用swift写了.所以,要学会如何在oc的项目中调用swift. 这里主要借助一个桥梁文件,这个桥梁文件一般在你导入sw ...

  7. 键盘工具栏的快速集成--HcCustomKeyboard

    源项目地址:HcCustomKeyboard HcCustomKeyboard是一个键盘工具栏控件: 效果: HcCustomKeyboard使用很方便: 三部: 添加控件->操作处理-> ...

  8. a链接中关于this的使用

    a连接点击事件用 this 时,要用 onclick='click(this)',href='javascript:void()' a连接无法使用,要看看是不是自动变成ie7或者更低

  9. 关于 ASP.NET vNext

    ASP.NET vNext 最大的特性就是跨平台(基于 Mono 运行时),试想下:作为.NET程序员,终于不被Java或C++程序员挑自己的短板,确实是蛮振奋人心的.当然,除了跨平台,使用 Rosl ...

  10. CSS3选择器使用小结

    CSS3 选择器小结 一 通用选择器 1  *{}通配选择符(CSS2):适合所有元素对象. 2  E类型(HTML)选择符(CSS1):以文档语言对象类型DOM作为选择符. 3  E#myid是id ...