本文旨在讨论使用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

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

  1. .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...

  2. CSS expression属性

    expression属性是在IE5版本之后支持使用的,用来把CSS属性和JavaScript脚本关联起来.简单粗暴的说,该属性是用来调用JavaScript代码的. CSS属性后面是一段JavaScr ...

  3. 通过动态构建Expression Select表达式并创建动态类型来控制Property可见性

    通过动态构建Expression Select表达式并创建动态类型来控制Property可见性 项目中经常遇到的一个场景,根据当前登录用户权限,仅返回权限内可见的内容.参考了很多开源框架,更多的是在V ...

  4. VS2010 无法计算HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0@VCTargetPath处的属性表达式

    VS2010打开.csproj工程文件报错,不能加载,错误信息如下: 无法计算HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\1 ...

  5. Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx

    Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\Java ...

  6. Atitit.java expression fsm 表达式分词fsm引擎

    Atitit.java expression fsm 表达式分词fsm引擎 C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\JavaExpFsm.java ...

  7. IE css expression(表达式)

    很多时候我们需要对IE6的bug写一些hack,如max-height,absolute元素高度100%等. css里面的 expression(表达式)和js里面的差不多,如: 获取当前元素的高度: ...

  8. 使用 App Studio 快速定制一个你自己的专属应用

    使用 App Studio 快速定制一个你自己的专属应用 如果已有做一个手机应用的想法,只需要一些简单的图片,视频,或者RSS源,就可以通过App Studio制作出你心仪的应用! App Studi ...

  9. c#用object将datatable快速填充excel后下载表格后打不开的问题

    最近在用c#的asp.net,需要批量导出数据.原本用的是stringbuilder逐个填充,但是只能做到html强制格式转换为xls,这不是真正的excel表格,所以在网上找了datatable快速 ...

随机推荐

  1. 一篇关于Redis的很不错的文章,转载保存下

    绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知.这里对 Redis 常见问题做一个总结,解决 ...

  2. MVC 返回对象换成json

    错误界面: 这个就是返回对象没有转换成json 就是要再返回的头部添加application/json 代码: using System; using System.Collections.Gener ...

  3. 【Java----字符串转义与反转义】

    apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,xml ...

  4. BZOJ 1853: [Scoi2010]幸运数字(容斥原理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1853 题意: 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运 ...

  5. 【Python】远离 Python 最差实践,避免挖坑

    原文链接:http://blog.guoyb.com/2016/12/03/bad-py-style/ 最近在看一些陈年老系统,其中有一些不好的代码习惯遗留下来的坑:加上最近自己也写了一段烂代码导致服 ...

  6. JAVA锁机制(上)

    在实际开发中经常会用到多线程协作来处理问题,锁是处理线程安全不可缺少的机制.在JAVA中可以通过至少三种方式来实现线程锁. 1.  synchronized修饰符,这种锁机制是虚拟机实现的一种锁. 2 ...

  7. JSP 表单处理

    JSP 表单处理 我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理.浏览器中使用 GET 和 POST 方法向服务器提交数据. GET 方法 GET方法将请求的编码信息添加在网址后面, ...

  8. hdu2188巴什博弈

    裸题,直接套公式 巴什游戏只是换了一个说法而已 #include<map> #include<set> #include<cmath> #include<qu ...

  9. IOS UI-QQ好友列表

    一.Model // // FriendsModel.h // IOS_0111_好友列表 // // Created by ma c on 16/1/11. // Copyright (c) 201 ...

  10. notepad++支持自定义文件类型

    场景描述: 使用notepad++编辑less.ejs文件,发现高亮和提示均无效,修改如此需要进行额外的设置: 解决方法: 以less为例, 1.设置 >语言格式设置 >语言里找到CSS, ...