找回密码
 立即注册

QQ登录

只需一步,快速开始

lnskysss

gw0506
超级版主   /  发表于:2016-2-26 17:48:00
11#
现在已经知道原因了。第95行,设置了公式  C43/C17. 这个导致第二次触发CellChanged事件之后,e.Row 和 e.Column两个参数出错,我估计这是个bug。

暂时我建议你换个事件,来处理你的业务逻辑。
回复 使用道具 举报
lnskysss
注册会员   /  发表于:2016-2-27 11:22:00
12#
回复 11楼gw0506的帖子

能不能把这个bug解决一下?我这急用,现在找不到可以替代这个事件的事件。还有一个问题就是,这个cellchange事件能触发多少次?我测试发现如果三个或以上的单元格与一个单元格更改有关联,更改这个单元格时候只触发两次,而三个单元格的值发生了更改。不知道是我的demo的问题还是本身就是这样设计的?
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-2-29 09:55:00
13#
我目前的跟踪结果跟你一样,不管几个单元格的值依赖于同一个单元格,该单元格值变化之后,最多触发2次。
修复的问题还在等研发确认,不过我们会尽力帮助你的。

另外,如果事件不能换的话,你可以考虑一下判断被修改的单元格是否可编辑,或者是否有公式。我看你的那些有公式的单元格都不可编辑。
回复 使用道具 举报
lnskysss
注册会员   /  发表于:2016-2-29 10:09:00
14#
回复 13楼gw0506的帖子

这个有没有可能改成几个单元格改变就触发几次而不是两次?自动计算的单元格是不可编辑的,要不然用户会添乱
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-2-29 11:39:00
15#
我明白你的需求了。实际上你希望变一个发一个,对吧。
我会跟进一下修复后是什么结果。

目前可以确认这个bug是已知的,并且在4月份发布的维护版本中会包含它。
回复 使用道具 举报
lnskysss
注册会员   /  发表于:2016-2-29 13:41:00
16#
回复 15楼gw0506的帖子

对,实际需求上,更改表格的一个字段其它自动计算的字段更改也要一并写入数据库,如果只触发两次还得自己写代码去实现,现在这个问题我暂时用笨的方法隐蔽了这个错误,已经发布使用了,希望这个Bug尽快修复发布维护版本。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-2-29 18:19:00
17#
这个请放心,我会加紧跟踪这个问题,并且争取赶在在3,4月份的版本中发布。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-3-1 12:19:00
18#
补充一下这个事件的用法和策略:

第一次触发事件,是你手工改动的那个单元格。第二次触发事件是所有相关的单元格,是个CellRange。我测试的确如此。你看看你那边的。
  1.             Cell cell = this.fpSpread1.ActiveSheet.Cells[e.Row, e.Column, e.Row + e.RowCount - 1, e.Column + e.ColumnCount - 1];
  2.             Console.WriteLine("CellChange fired for cell range: " + cell.ToString(cell));
复制代码
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-3-24 12:31:07
19#
目前从研发反馈的信息和咱们的要求有分歧。我会进一步沟通。
实际上你是想知道哪些数据变了对吧。这个我再找找别的办法。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-3-24 15:46:15
20#
这个Change时间,在你这种情况下,发两次。第一次是编辑修改的单元格。第二次是因为这个单元格变化而引起的其他所有的单元格变化,他会返回一个cellrange。这时候这个cellrange中,有可能有些是没有变化的。

这个接口和策略恐怕很难改了。主要是考虑对老用户的兼容性。而其实位置不同(应该是C17,实际拿到的B17),是因为虽然最上面的是C列,但是下面有合并单元格的,把B和C合并了。这时候取CellRange就是从B开始算了。否则,下面那个Cell取不到。

我建议你修改一下,当ColumnCount和RowCount不为1的时候,将这个CellRange回传去更新数据。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部