Net之DataTable快速定制,拒绝使用遍历的方法
2012-02-22 11:34
369 查看
本文旨在讨论使用DataColumn.Expression属性定制列,高手绕过。
这里只介绍两个经典的场景,抛砖引玉其他更多功能待各位读者自己发现吧!
场景一:
DataTable里有两个列分别为每种商品的[price]单价和[Num]数量,现在需要得到每种商品的总价值:
方法一(不推荐):
增加一列[Value],遍历DataTable用每一行的[price]*[num]得到价值,然后赋给列[value],代码如下:
复制代码
之后就可以进行常规的绑定展示操作。
方法二(推荐):
增加一列[Value],使用该列的Expression属性定制此列,代码如下:
复制代码
这样就好了,之后就可以进行常规的绑定展示操作,因为Expression表达式是延迟执行的,即绑定时才执行,所以没有绑定的情况下,看到的DataTable内容还是不变的,如果要得到在此表达式作用下的表请使用方法:toTable();
如下:
这里只介绍了数学表达式的用法,类似的加减除法都可以这样实现,如果是要连接字符串怎么办呢?请见下面的例子:
场景二:
比如:DataTable中有两列分别是[Name]部门名称和[DepartId]部门ID,现在需要一个部门和ID连接在一起的列用来展示比如:人力资源部-010怎么做呢?方法同上,这里就要用到字符串连接表达式了,见代码:
这里的“+”用作连接字符串的作用,再也不用一个个遍历的方法来实现类似的功能了,当然Expression表达式可以发挥的作用远不止这些,详见:http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression.aspx
不止列可以定制,我们也可以像使用sql操作数据库那样操作DataTable的行,此时要用到DataTable.DefaultView.RowFilter属性。下次再介绍吧有兴趣的可以自己搜索一下。
这里只介绍两个经典的场景,抛砖引玉其他更多功能待各位读者自己发现吧!
场景一:
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属性。下次再介绍吧有兴趣的可以自己搜索一下。
相关文章推荐
- Net之DataTable快速定制,拒绝使用遍历的方法
- .Net之DataTable快速定制,拒绝使用遍历的方法
- 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- asp.net使用DataTable构造Json字符串的方法
- asp.net使用DataTable构造Json字符串的方法
- Asp.net中建立MS office组件时出现“拒绝访问”和“消息筛选器显示应用程序正在使用中”错误的解决方法
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(9):服务器端和客户端数据类型的自动转换:DataTable和DataSet
- jQuery插件DataTable使用方法详解(.Net平台)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(9):服务器端和客户端数据类型的自动转换:DataTable和DataSet
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(9):服务器端和客户端数据类型的自动转换:DataTable和DataSet
- ASP.Net的导出Excel的快速方法,DataTable导出Excel(亲测,非原创)
- 快速掌握 Android Studio 中 Gradle 的使用方法 [转http://blog.csdn.net/feelang/article/details/41783317]
- SharePoint内容定制之XSLT高级用法——使用Muenchian方法分组XML数据
- 三种使用栈的后序遍历方法
- 总结:ADO.NET在开发中的部分使用方法和技巧
- 使用Shell遍历目录及其子目录中的所有文件方法
- MOSS 2010:Visual Studio 2010开发体验(20)——使用ADO.NET Data Service快速访问SharePoint列表数据
- VS 2005 (.Net 2.0) 提供的Login1的使用方法
- jquery使用each方法遍历json格式数据实例