Net之DataTable快速定制----Expression属性表达式

本文旨在讨论使用DataColumn.Expression属性定制列,高手绕过。

这里只介绍两个经典的场景,抛砖引玉其他更多功能待各位读者自己发现吧!

场景一:

DataTable里有两个列分别为每种商品的[price]单价和[Num]数量,现在需要得到每种商品的总价值:

方法一(不推荐):

增加一列[Value],遍历DataTable用每一行的[price]*[num]得到价值,然后赋给列[value],代码如下:


dt.Columns.Add("value");//增加新列value存储总价值
foreach(DataRow dr in dt.Rows)//遍历计算每种商品总值并存储到列[value]中{
dr["value"] = dr["price"]*dr["num"];
}

复制代码

之后就可以进行常规的绑定展示操作。

方法二(推荐):

增加一列[Value],使用该列的Expression属性定制此列,代码如下:


dt.Columns.Add("value");
dt.Columns["value"].Expression = "price * num";

复制代码

这样就好了,之后就可以进行常规的绑定展示操作,因为Expression表达式是延迟执行的,即绑定时才执行,所以没有绑定的情况下,看到的DataTable内容还是不变的,如果要得到在此表达式作用下的表请使用方法:toTable();

如下:


DataTable newTable = dt.DefaultView.ToTable();

这里只介绍了数学表达式的用法,类似的加减除法都可以这样实现,如果是要连接字符串怎么办呢?请见下面的例子:

场景二:

比如:DataTable中有两列分别是[Name]部门名称和[DepartId]部门ID,现在需要一个部门和ID连接在一起的列用来展示比如:人力资源部-010怎么做呢?方法同上,这里就要用到字符串连接表达式了,见代码:


dt.Columns["NameAndId"].Expression = "name+‘-‘+departid";

这里的“+”用作连接字符串的作用,再也不用一个个遍历的方法来实现类似的功能了,当然Expression表达式可以发挥的作用远不止这些,详见:http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression.aspx

不止列可以定制,我们也可以像使用sql操作数据库那样操作DataTable的行,此时要用到DataTable.DefaultView.RowFilter属性。下次再介绍吧有兴趣的可以自己搜索一下。

出处:http://blog.csdn.net/jacky4955/article/details/7282678

时间: 2024-10-18 02:32:37

Net之DataTable快速定制----Expression属性表达式的相关文章

TextBox 绑定到DataTable某一列属性上

将TextBox绑定到DataTable某一列属性上 DataTable dt = GetDataTable() textBox1.DataBindings.Add("Text", dt, "columnName", true); 当修改TextBox值时,必须要鼠标手动点击对应DataTable 列单元格(绑定到DataGridView中显示)才会更新,如何实时自动更新呢? 可以在TextBox中添加Validated事件(或者MouseLeave事件)实现更新D

[ASP.NET MVC]如何定制Numeric属性/字段验证消息

原文:[ASP.NET MVC]如何定制Numeric属性/字段验证消息 对于一个Numeric属性/字段,ASP.NET MVC会自动进行数据类型的验证(客户端验证),以确保输入的是一个有效的数字,但是呈现在页面上的错误消息总是一段固定的文本:“The field {0} must be a number”,本篇提供一种解决方案使我们可以对此验证消息进行定制.[源代码从这里下载] 目录 一.针对Numeric属性/字段默认验证消息 二.默认的验证消息来源于何处? 三.通过自定义ModelVal

利用DataTable快速批量导数据

DataSet ds = new DataSet();            using (SqlConnection conn = new SqlConnection(@"data source=.\sqlxu;initial catalog=NationalUnion20140717;persist security info=True;user id=sa;password=101;MultipleActiveResultSets=True"))            {    

提供SaaS Launchkit,快速定制,一云多端等能力,一云多端将通过小程序云实现

摘要: SaaS加速器的技术中心能力中,将提供SaaS Launchkit,快速定制,一云多端等能力,加速应用上云迁移.降低应用开发和定制的门槛,提升效率.其中非常关键的一云多端能力将通过小程序云实现. 演讲主题:SaaS加速器 III技术中心:聚合开放 高效强大 技术中心定义:阿里云以聚合开放的姿势,提供一个高效强大的技术开发平台 技术中心中提到的企业应用典型开发场景,最主要的受众是开发者.今天我们将会重磅发布两款产品系列:SaaS launch Kit和APaaS.第一,企业应用需要快速接入

SaaS加速器 III 技术中心:提供SaaS Launchkit,快速定制,一云多端等能力,一云多端将通过小程序云实现

https://yq.aliyun.com/articles/695746 演讲主题:SaaS加速器 III技术中心:聚合开放 高效强大 技术中心定义:阿里云以聚合开放的姿势,提供一个高效强大的技术开发平台 技术中心中提到的企业应用典型开发场景,最主要的受众是开发者.今天我们将会重磅发布两款产品系列:SaaS launch Kit和APaaS.第一,企业应用需要快速接入阿里云基础设施和售卖服务体系不论是合作伙伴还是企业客户的应用,都会面临一个怎样快速上云的问题:上云后的不同应用,如何带给企业客户

Reflection和Expression Tree解析泛型集合快速定制特殊格式的Json

很多项目都会用到Json,而且大部分的Json都是格式固定,功能强大,转换简单等,标准的key,value集合字符串:直接JsonConvert.SerializeObject(List<T>)就可以搞定了,但凡事并非千篇一律,比如有的时候我们需要的Json可能只需要value,不需要key,并且前后可能还需要辅助信息等等,那该怎么办呢?我所能想到的可能有两种方案,1.自定义跟所需json格式一样的数据结构model,然后用JsonConvert.SerializeObject(model)直

Centos 中如何快速定制二进制的内核 RPM 包

1.rpm 制作前的环境准备: yum install -y ncurses-devel qt-devel rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel newt-devel python-devel zlib-devel bc 2.准备内核的源代码组件 cd /

Centos 中如何快速定制二进制的内核RPM 包

随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(root和普通用户)来讲解如何制作内核的二进制rpm包. Building主机系统环境约定: OS : CentOS release 6.6 Arch : i686 一,rpm包简单定制 注意: 这里我们首先要预留至少20GB的临时文件空间. 1.rpm 制作前的环境准备: yum -y groupins

Red Hat 系列如何快速定制二进制内核 RPM 包?

随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(root和普通用户)来讲解如何制作内核的二进制rpm包. Building主机系统环境约定: OS : CentOS release 6.6 Arch : i686 第一部分,rpm包简单定制 注意: 这里我们首先要预留至少20GB的临时文件空间. 一.rpm 制作前的环境准备: yum -y group