找回密码
 立即注册

QQ登录

只需一步,快速开始

CanYou1

高级会员

45

主题

227

帖子

1359

积分

高级会员

积分
1359

活字格认证微信认证勋章元老葡萄

CanYou1
高级会员   /  发表于:2015-8-3 14:05  /   查看:27491  /  回复:40
Alice,您好!如题,C1DataGrid进入某一单元格时,为什么Error取了2次,this[string columnName]方法调用了24次?
一行数据8个字段,那就是this[string columnName]方法会对每个字段调用3次,
同时1次取Error的行为会对每个字段验证1次,2次取Error总共对字段的验证就是16次,加上this[string columnName]方法验证了24次,
总共在进入一个单元格时(还没有开始编辑)就已经验证了40次,这对用户来说是不能接受的啊!
这个问题很严重,严重影响了性能,麻烦您看下是怎么回事?先谢了!

Demo:



截图:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

40 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-8-3 17:03:00
沙发
回复 1楼CanYou1的帖子

感谢对该问题的反馈。
根据你的Demo和提示,进行了测试。
在this[string columnName]添加断点。运行时进入SET列的单元格,尝试focus离开会触发校验。
由于是对行进行校验,因此行里的每个单元格都会触发校验。
在断点里可以获取到不同的列名,不是同一列触发的校验。触发的次数和列数一致,没有重现22次校验。

有关行校验,一行中的所有列的单元格都会触发校验,这是设计。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-3 17:21:00
板凳
回复 2楼Alice的帖子

Alice,进入一个单元格时,this[string columnName]断点会被触发24次,这是每次必现的,麻烦你再试试!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-3 18:06:00
地板
回复 3楼CanYou1的帖子

你好。很抱歉不能重现24次的问题。
测试步骤如下:
1.在string this[string columName]里添加断点,如下图所示:



为了精确的得到触发了几次,我还添加了count进行计数。
2.运行程序。
3.点击Set列的第一行的单元格进入编辑状态,在断点处触发7次,获取到columnname,一行刚好7列,获取不同列的名。
输入信息如下所示:


如图所示:进入编辑状态一共在断点处出现7次,和行校验的列名一致。

ps, 第一次出现的第一个计数是运行程序出现获取值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-4 10:11:00
5#
回复 4楼Alice的帖子

对不起,Alice,是我描述不准确。
1,准确来讲,是我从一个单元格跳到另一个单元格时,会触发22或23次this[string columnName]方法。
2,我编辑一个单元格时,为什么要触发其它单元格的校验?这会额外消耗性能啊。
3,当我进入一个单元格,什么都还没输就校验了一次,这也不应该啊。
4,从一个单元格跳到另一个单元格时,Error属性取了2次,这又是为什么?在我看来,行校验应该要在行提交后再触发吧?编辑行单元格时,不应该触发行校验。
5,从一个单元格跳到另一个单元格时,由于以上不大正常的校验,导致行头的小红点提示信息重复,同一个信息重复了3次,这个问题在我们项目里备受诟病,我在去重复上花了大量精力,依然无法做到完全去重复,现在我觉得应该从源头上解决这个问题,而不是出现了重复提示后再去用代码将重复的提示去掉。
麻烦您帮忙看看这几个问题。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-4 14:33:00
6#
回复 5楼CanYou1的帖子

你好。
我依然无法重现你的22次校验的问题。
首先我来根据你的程序解释校验。
你在数据源里添加这样的标记
  1.      [Required(AllowEmptyStrings = false, ErrorMessage = "来源必填")]
  2.         public string BoardType { get; set; }
复制代码

这是数据源里字段的校验,当焦点离开的时候,就会对这个字段进行校验。相应的会提示ErrorMessage的信息。
另外你的程序里还使用了如下代码:
  1. <c1:C1ValidationBehavior.ValidationBehavior>
  2.                 <c1:C1ValidationBehavior/>
  3.             </c1:C1ValidationBehavior.ValidationBehavior>
复制代码

这个校验,会在焦点离开的时候触发。他们会执行get/set的操作,对字段进行取值和设置,并判断合法性。这个校验的规则无法改变,不支持定制。

然后我们再来看你的问题。
1.从一个单元格跳到另一个单元格,我这里没有重现22次或23次的问题。我这里会触发7次,每次的columnName是数据源的每个字段。也就是说会对整行的每个单元格做校验。
2.这个我在之前解释过了,你使用的C1ValidationBehavior就是这样的校验机制。你把这段代码删除掉就不会对整行做校验。
3.你的程序运行起来,是没有数据的,里面只包含一个NewRow,你进入编辑状态的时候,实际上是将NewRow提交,产生了行提交的操作,出现的校验。
4.在取Error的时候,你也可以看下columnName,它是这两个不同的单元格的对应的字段,并非重复的。

很抱歉给你带来的不便,原因我已经在最前面解释过了。
是由于你使用C1ValidationBehavior,这是C1ValidationBehavior的设计,我也和研发讨论过你的代码逻辑,按照你的代码逻辑,目前这是设计。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-4 17:10:00
7#
谢谢你的回复!多次检验在性能上的消耗我们暂时可以忍受,
但是,在我的demo里你也能看到,行头小红点那里有重复提示,这个是我们的客户无法忍受的。
单元格的数据检验是必不可少的,行头的小红点提示是你们的产品设计,这个功能很好,我们既然买了你们的产品,当然希望把它好的功能发挥出来。可是,它的提示重复,这是不是你们产品的缺陷啊?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-5 09:33:00
8#
回复 7楼CanYou1的帖子

谢谢你的理解。

有关行头提示的问题我们在其他的帖子里也讨论过。
重复的原因是使用了6楼提到的两种校验。
根据你的程序逻辑,我们能提供的解决方案是:
1.C1ValidationBehavior校验,可以通过CommittedRowEdit/CommittedEdit/CommittedNewRow事件里进行处理,控制Error显示信息。
2.如果觉得通过事件处理过于复杂,可以修改数据源里的字段属性。Required里的ErrorMessage为空。
------------------------------------------------------------------------------------------------------
[Required(ErrorMessage=&quot;&quot;)] // 删除掉这个错误提示属性,只使用IDataErrorInfo 继承的信息
------------------------------------------------------------------------------------------------------

之前讨论的帖子:
http://gcdn.gcpowertools.com.cn/showtopic-16320.html

为了帮助你解决问题,请将你的联系电话通过站内短消息发给我,我们电话沟通下。
再次谢谢你我们产品的支持和信任。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-5 15:22:00
9#
回复 8楼Alice的帖子

关于第一种方法,目前我们项目里已经用了的,但是它不能完全解决问题,在某些情况下还是会出现重复提示,稍后我会发个Demo给你。
关于第二种方法,提示信息我们没办法不自定义啊,我也没办法说让团队所有人把以前加的自定义提示信息都去掉啊。这种办法用不了。
关于我的电话,我找下站内消息是什么,还没用过,找到就发给你。
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-5 15:26:00
10#
回复 8楼Alice的帖子

给你发站内消息收件人该怎么写?
回复 使用道具 举报
12345下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部