[转]asp.net中对DataTable数据进行排序、检索、合并、分页、统计_ajyqkv1186的博客-程序员秘密

技术标签: c#  数据库  

asp.net中对DataTable数据进行排序、检索、合并、分页、统计

  

一、排序

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 '%2007%')");

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语句来获取这些统计了。那么在DataSe

t/DataTable中是否可以进行统计呢?答案是肯定的。

  在MSDN中,有一篇MS推荐的统计方法,就是逐行对数据进行求和统计,这个方法,其实有

等于无(或许这个方法只是针对于DataGrid求取小计用吧),因为这个方法中采用的是DataGri

d的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强,这个统计是错误的,因为Compu

te的统计不具备Sum(Quantity*Price)这样数据的功能。那怎么办呢?

  

  对于这样复杂数据的统计,我们可以在DataTable中创建一个新的字段来完成,比如Amount

,同时设置该字段的Expression为Quantity*Price,这样我们就可以使用统计功能了:

  table.Compute("Sum(Amount)","true");

转载于:https://www.cnblogs.com/aowind/archive/2009/12/18/1626896.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ajyqkv1186/article/details/101386949

智能推荐

PDFLaTeX和XeLaTeX有什么区别_蛐蛐蛐的博客-程序员秘密

这是我一直没搞清楚的问题,PDFLaTeX和XeLaTeX都是TeX Live包含的程序。今天是中秋节,放假的时候抽点时间查查。其实很简单,下面总结一下网上的几位牛人的意见:1. PDFTeX程序:Tex语言的一个实现,也就是把Tex语言转换为排版的一个程序。它会把TeX 语言写的代码直接编译成 PDF文件。2. PDFLaTeX命令:PDFTeX程序中的命令,用来编译用LaTeX

docker 安装 oracle11g & oracle导入dmp文件_从零学习大数据的博客-程序员秘密

1.docker 安装 oracle11g拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g启动容器docker run -d -p 1521:1521 -v /opt/oracle:/tmp --privileged=true --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g --restart=on-failur

POI处理Excel,条形图,散点图,折线图_poi官网画图_小李爱coding的博客-程序员秘密

POI处理Excel,条形图,散点图,折线图一、引入Maven依赖二、条形图实现2.1实现效果展示2.2 代码实现如下:三、散点图实现-----对应Excel中的XY散点图3.1初始数据准备3.2实现效果展示3.3代码实现如下:项目中需要使用到Java来处理Excel图表的情况,记录一次Java使用POI来处理条形图,散点图,折线图。直接上代码:一、引入Maven依赖// An highlighted block&lt;dependency&gt; &lt;groupId&gt;org.apach

介绍两款Microsoft Edge谷歌内核浏览器的两款插件_edge安装jsonformatter_爱吃西瓜大人的博客-程序员秘密

夜黑风高( •̀ ω •́ )y,好久没写文章了。在这里推荐两款 浏览器插件, 哇哈哈第一款 JSON Formatter for Edgehttps://microsoftedge.microsoft.com/addons/detail/njpoigijhgbionbfdbaopheedbpdoddi第二款 侧边翻译https://microsoftedge.microsoft.c...

尽情聊天吧!Sametime Limited Use 10.0 发布!_协作者的博客-程序员秘密

大家好,才是真的好。6月14号,Sametime Limited Use 10.0正式发布。首先发布的是支持32位平台版本的Sametime Limited Use,随后即将发布的是64位的Sametime Limited Use。即32位的Sametime V10即可支持32位的Domino R9.0.1(需要9.0.1FP10),64位的Sametime V10支持在64位 Domino V...

小众公众号的简单运营_weixin_30869099的博客-程序员秘密

我们从4月初开始运营一个新的公众号。目前一直在持续运营中,粉丝数量和粉丝关注度也保持稳步上升,每天分享的文章也有很多的好评,得到转发。同时也收到过很多的吐槽,但我们一直很关注粉丝的反馈和吐槽,毕竟这才能让我们做的更好。但是公众号运营的痛点太多了。粉丝增长不够快,用户粘性不够大,文章阅读数量不够多,传播力度不够广。对于一个公众号来说,不论粉丝多还是少,热情还是不热情,都需要运营人员精心的照料。今...

随便推点

ERR_CLEARTEXT_NOT_PERMITTED_GoAndSeeSee的博客-程序员秘密

ERR_CLEARTEXT_NOT_PERMITTED是Android9.0(API级别28)默认情况下不能使用明文url ,因此http的url均无法在webview中加载。&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;manifest ...&gt; &lt;uses-permission android:name="a...

第六周项目四_lql19931103的博客-程序员秘密

/** 程序的版权和版本声明部分* Copyright (c)2013, 烟台大学计算机学院学生* All rightsreserved.* 文件名称: 三角形类.cpp* 作者:李巧丽* 完成日期: 2013年4月8日* 版本号: v1.0* 输入描述:无* 问题描述:设计求三角形周长和面积的类。* 程序输出:三角形的周长和面积*/#include #include

嵌入式linux编程开发必备知识_像向日葵一样的博客-程序员秘密

嵌入式linux是嵌入式开发必不可少的一份子,在科技高速发展的今天,嵌入式已然已经成为了最热门的技术之一了。对于想要学习好嵌入式的学员来说,现在学习好linux是很有必要的,因为这个是嵌入式的核心。那么学习嵌入式linux编程开发应该要必备什么条件呢?下面西安鸥鹏的小编就给大家讲解下。  linux嵌入式编程开发学习时,你要从这几个方面来下手:  首先就是熟知的C语言了,C语言是必须要学的,不管学习什么,都是要会的,对于C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C.

【BP回归预测】基于matlab思维进化算法优化BP神经网络回归预测【含Matlab源码 2031期】_海神之光的博客-程序员秘密

1 思维进化算法的选择与改进1.1 算法选择深度学习与人工智能发展迅速,在疾病预测方面也起到至关重要的作用。通过对比Logistic回归模型和BP神经网络两种模型,并将模型预测结果与传统的Logistic回归模型预测结果进行分析发现,基于BP神经网络建立2型糖尿病预测模型较好,最终选择BP神经网络作为糖尿病并发症的预测模型[14]。1.2 算法基本思路。

使用redis实现延迟消息_新线君的博客-程序员秘密

思路利用redis的zset数据结构Zset本质就是Set结构上加了个排序的功能,除了添加数据value之外,还提供另一属性score,所以我们把时间放在score上 新开一个线程不断去轮询比对。、代码/** * @Auther: wwh * @Date: 2019-03-29 11:06 * @Description: */public class RedisDelayTe...

关于Windows系统MySQL5.6数据库root用户密码重置的注意事项_VitusSong的博客-程序员秘密

百度一下,这类文章已经很多了,这里主要指出了一个“一夫当关万夫莫开”的关键点。一、MySQL5.6数据库root用户密码重置的主要步骤如下:1、 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令(管理员权限运行命令行):net stop mysql 打开第一个cmd1窗口,切换到mysql的bin目录,运行命令:mysqld -