本文旨在讨论使用DataColumn.Expression属性定制列,高手绕过。sql
这里只介绍两个经典的场景,抛砖引玉其余更多功能待各位读者本身发现吧!数据库
场景一:express
DataTable里有两个列分别为每种商品的[price]单价和[Num]数量,如今须要获得每种商品的总价值:spa
方法一(不推荐):.net
增长一列[Value],遍历DataTable用每一行的[price]*[num]获得价值,而后赋给列[value],代码以下:code
dt.Columns.Add("value");//增长新列value存储总价值 foreach(DataRow dr in dt.Rows)//遍历计算每种商品总值并存储到列[value]中{ dr["value"] = dr["price"]*dr["num"]; }
以后就能够进行常规的绑定展现操做。blog
方法二(推荐):资源
增长一列[Value],使用该列的Expression属性定制此列,代码以下:字符串
dt.Columns.Add("value"); dt.Columns["value"].Expression = "price * num";
这样就行了,以后就能够进行常规的绑定展现操做,由于Expression表达式是延迟执行的,即绑定时才执行,因此没有绑定的状况下,看到的DataTable内容仍是不变的,若是要获得在此表达式做用下的表请使用方法:toTable();get
以下:
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