none
高人救命 DataTable 有没有办法自定义列计算函数 RRS feed

  • 问题

  • DataTable中, DataColumn 的 Expression 支持一些计算函数, 比如 SUM, AVG, TRIM, IIF 等函数
    但一些常用函数, 象四舍五入函数, 就没有支持, EXCEL中的很多函数也没能支持,
    现在我的一个项目中, 因为用户要求能够建立表单模板, 能够支持常用函数

    我想扩展一下, 给DataTable 的列添加一些新的计算函数, 请问有没有办法

    请大师们帮帮忙

    2010年1月13日 6:08

答案

  • 你好!

    可能你没有办法利用 Expression 表达式来过完成你的需求。

    考虑一些变通的方式来实现,比如你说的“四舍五入”

    编写一个公用方法传入“四舍五入”的必要参数, 在方法丙完成两件事。

    1 给 DataTable 添加一个字段,根据条件计算出“四舍五入”后的值写到这个字段中。
    2 给 DataTable 注册 RowChanged 事件,在源数据发生变化后重新计算这个值。

    如果你使用的是 .Net 3.0 以上的版本,还可以将这个方法写成扩展方法方便调用 。


    知识改变命运,奋斗成就人生!
    • 已标记为答案 YiChun Chen 2010年1月14日 10:04
    2010年1月13日 7:17
    版主

全部回复

  • 可以自己写个方法。利用Compute进行解析

    你参照下这里
    http://www.cnblogs.com/dlwang2002/archive/2007/10/24/936501.html
    努力+方法=成功
    2010年1月13日 6:44
  • 你好!

    可能你没有办法利用 Expression 表达式来过完成你的需求。

    考虑一些变通的方式来实现,比如你说的“四舍五入”

    编写一个公用方法传入“四舍五入”的必要参数, 在方法丙完成两件事。

    1 给 DataTable 添加一个字段,根据条件计算出“四舍五入”后的值写到这个字段中。
    2 给 DataTable 注册 RowChanged 事件,在源数据发生变化后重新计算这个值。

    如果你使用的是 .Net 3.0 以上的版本,还可以将这个方法写成扩展方法方便调用 。


    知识改变命运,奋斗成就人生!
    • 已标记为答案 YiChun Chen 2010年1月14日 10:04
    2010年1月13日 7:17
    版主
  • 是要解析,现在的问题是,DataTable中能够解析的函数不多
    比如四舍五入函数ROUND,对数函数LN,EXP 函数等,不能直持。
    我想问问有办法办法,自己添加一些能够解析函数

    2010年1月16日 0:18
  • 谢谢你的回复,但考虑到添加字段的计算公式,是用户后期才添加上去的,
    字段和计算公式,是根据用户自定义,后期才添加上去的,
    所以用直接编程实现的方式行不通

    2010年1月16日 0:20
  • 如果无法直接扩展实现,大师们有没有 如何实现 计算公式解析与计算 的资料链接学习一下
    谢谢了
    2010年1月16日 0:23