找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

q406157290
高级会员   /  发表于:2017-5-10 21:53  /   查看:10647  /  回复:25
本帖最后由 q406157290 于 2017-5-10 22:00 编辑





程序客户正在用
我现在做了个简单的Demo重现这个问题
出现了这个大bug 我们花了好长时间的调查发现原来是你们控件本身的问题,这个bug让给我们造成了很大的麻烦
希望给出 出错原因  已经解决方案  
这个问题很着急 很着急
麻烦了

本帖子中包含更多资源

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

x

25 个回复

正序浏览
JeffryLI
葡萄城公司职员   /  发表于:2017-7-5 16:56:35
26#
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-7-5 15:16:03
25#
Alice 发表于 2017-5-18 15:29
谢谢您的反馈的信息。
为了避免您使用中出现问题,您可以参考如下事件的处理逻辑,您可以根据这些信息处 ...

en hao 辛苦了
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-5-18 15:29:52
24#
本帖最后由 Alice 于 2017-5-18 16:03 编辑
q406157290 发表于 2017-5-18 09:00
您提供给我们的方法并不符合我的逻辑需求
前面有提到已经不在changing里面去处理这些逻辑了
拿到change ...

谢谢您的反馈的信息。
为了避免您使用中出现问题,您可以参考如下事件的处理逻辑,您可以根据这些信息处理自己的逻辑,以避免之前提到的情况。

var editItem = dataGrid.Rows.FirstOrDefault(m => m != null && m.IsEditing);
这句代码,是一句会遍历所有行的代码。它会循环遍历datagrid的所有行。
假设您有300行,它就会遍历300行。
数据绑定的时候页面显示的数据不一定是300行,它隐藏掉不能显示出来的数据,根据界面的大小,也许它只有12行。
而过滤也是一个遍历的的操作,它会遍历并按照所有的条件去做清除操作,以便显示合适的内容。

也就是说初始的时候记录的显示数据是12行。

当没有if条件这句语句的时候,双击单元格会触发SelectionChanings事件,因为没有判断条件所以直接就对Rows的所有对象做了遍历,这时候就会将所有遍历的行(假设是300行做对象的记录)
在复制粘贴完成做过滤的时候,会遍历清除掉刚才300行的记录,清除的时候会先触发SelectionjChanging事件通知用户我们要清除哪些,然后就会进入到您那段代码逻辑(Changing)中。
做遍历的时候依然是刚才的300条数据,所以就按照逻辑进行下去。


当有if条件的时候,双击单元格会触发SelectionChanging事件,但是有if语句,因此不会进入到if语句执行遍历取行的操作。
在复制粘贴完成做过滤的时候,这个时候进入到SelectionChanging事件中,if条件是满足的,就会执行这句代码
var editItem = dataGrid.Rows.FirstOrDefault(m => m != null && m.IsEditing);
它做了遍历并到了changed事件,最后删除掉当前的item。在遍历的过程中实际上它将12行数据修改成了300行数据。
在C#中是不允许运行遍历的时候对集合的数量进行修改的,因此就会出现这个错误。

所以无论changing/changed都是一样的道理。
以上的内容提供给您,给您作为处理逻辑的参考。



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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-5-18 09:00:23
23#
Alice 发表于 2017-5-17 15:14
changing方法的设计是为了在选中区域发生变化的时候让用户知道我们要remove哪些,要添加哪些到新的range ...

您提供给我们的方法并不符合我的逻辑需求
前面有提到已经不在changing里面去处理这些逻辑了
拿到changed里去处理了,但有时候会出NullException 还是无限出

本帖子中包含更多资源

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

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-5-17 15:14:54
22#
q406157290 发表于 2017-5-17 08:59
为什么使用selectItem也会出现null异常
这难道不是bug吗?
怎么总是推托我们使用不当呢

changing方法的设计是为了在选中区域发生变化的时候让用户知道我们要remove哪些,要添加哪些到新的range里面。并不能取到编辑的行。
我们有提供其他的方法去获取编辑状态的行,比如你可以在BeganEdit 这个方法里面拿到row和column信息,而不是changing方法。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-5-17 08:59:02
21#
Alice 发表于 2017-5-16 17:55
这个事件不建议用来取编辑的值,原因之前已经解释过了。
如果是有需求需要建议,我可以给你提供些合理的 ...

为什么使用selectItem也会出现null异常
这难道不是bug吗?
怎么总是推托我们使用不当呢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-5-16 17:55:07
20#
q406157290 发表于 2017-5-16 08:32
在selectionChanging里我出的数组下标越界的异常
在selectionChanged能里出null指针异常

这个事件不建议用来取编辑的值,原因之前已经解释过了。
如果是有需求需要建议,我可以给你提供些合理的思路和方法。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-5-16 08:32:33
19#
Alice 发表于 2017-5-15 16:25
不建议在changing事件里获取当前编辑的值。

在selectionChanging里我出的数组下标越界的异常
在selectionChanged能里出null指针异常
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-5-15 16:25:36
18#
q406157290 发表于 2017-5-15 11:19
请先忽略我的需求

我现在想要知道的是 怎么样的写法能避免再出现这个问题

不建议在changing事件里获取当前编辑的值。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部