请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb

中级会员

53

主题

198

帖子

987

积分

中级会员

积分
987

微信认证勋章

yin_tb
中级会员   /  发表于:2021-11-17 12:34  /   查看:1785  /  回复:8
1金币
如题:绑定到datatable时,公式计算的单元格不实时更新到datatable。
在DEMO中,定义了一个datatable,数量,单价,金额。
spread中,定义了公式,金额等于数量*单价
footer中显示合计,用datatable.compute来合计

WindowsFormsApplication1.zip

104.64 KB, 下载次数: 56

最佳答案

查看完整内容

收到,谢谢描述的这么详细, 刚刚看了一下,实际上主要是change事件先于更新数据发生,所以你没法获得正确的datatable值, 如果按照你这种方式的话,可以用datatable 的RowChanged事件(此事件会被触发两次,第二次就是计算单元格的更新) 在这里输入你要设置的和datatable数据源有关的内容

8 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-17 12:34:29
来自 6#
本帖最后由 Richard.Ma 于 2021-11-17 16:01 编辑

收到,谢谢描述的这么详细,

刚刚看了一下,实际上主要是change事件先于更新数据发生,所以你没法获得正确的datatable值,
如果按照你这种方式的话,可以用datatable 的RowChanged事件(此事件会被触发两次,第二次就是计算单元格的更新)
在这里输入你要设置的和datatable数据源有关的内容

image.png59971312.png
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-11-17 12:40:45
2#
如果这是个Bug,那我只能每次在fspread的Change事件中,手动的,去更新datatable那个值,让它等于那个Cell的值了
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-17 14:42:25
3#
这个设置页脚,我建议你就直接按照下面的这种方式设置,不需要将值设置为数据计算的结果,这样肯定是实时更新的
https://www.grapecity.com/spread ... n-columnfooter.html

  1.             fs1.ActiveSheet.ColumnFooter.SetAggregationType(0, 1, FarPoint.Win.Spread.Model.AggregationType.Sum);
  2.             fs1.ActiveSheet.ColumnFooter.SetAggregationType(0, 2, FarPoint.Win.Spread.Model.AggregationType.Sum);
复制代码
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-11-17 14:58:28
4#
我不能用你说的方法,我用datatable的compute是有原因的,demo里,我没加条件,其实,compute里的条件,我只汇总指定条件的数据,比如“bend=true”
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-11-17 15:09:28
5#
本帖最后由 yin_tb 于 2021-11-17 15:30 编辑

我详细的解释一下吧,你说的方法我明白,这样,在界面上,确实是实时合计了。我demo里要问的是,为何不实时更新底层的datatable,因为:
最终,我是要把datatable作为参数传递,直接更新数据库的。所以,我需要公式单元格的值是对的,我不能在数据库里再去按公式求值。那样,就有点重复工作了。另外,我DEMO里只是用数量*单价来设公式,在我的实际应用中,不是这样,是有很多列,最后一列的公式是根据行中某个单元格的值设的公式,每一行可能都不一样,这样,在数据库中再去求值,更重复工作了。
想要的是,在界面中,用户编辑数据,实际更新了datatable,我传递到数据库,直接更新就可以了,而不用再按规则计算。
其实核心问题就是:

为何这个公式计算的单元格,更新底层datatable,慢了一拍。


回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-11-17 16:51:04
7#
好的,我试试
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-11-17 17:40:33
8#
谢谢马老师,看来我想像力还是不行,哈哈哈,把合计放到DataTable的RowChanged事件就可以了,这么简单的问题还麻烦你,对自己呵呵了,有时聪明,有时笨,有时能做出自己认为天才的设计和代码,有时又,唉,流汗呀。就像添加行,明明
dt1.Rows.Add(new object [] { 1 , 1, 1 });就可以,我非得声明新行,那样一列列赋值加,唉,习惯了。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-17 17:54:26
9#
O(∩_∩)O哈哈~,不客气,问题搞定了就好。都有钻牛角尖的时候,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部