找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

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





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

本帖子中包含更多资源

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

x

25 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2017-5-11 09:31:35
沙发
谢谢您的反馈。
您的问题我已经重现了。
看到您在程序中调用了SelectionChanging事件,并在事件中调用如下代码:
  1.      if (dataGrid.SelectedIndex > -1)
  2.             {
  3.                 var editItem = dataGrid.Rows.FirstOrDefault(m => m != null && m.IsEditing);
  4.             }
复制代码

请问您写这段代码的需求是什么?我们好给您找相应的解决方案。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-5-11 09:45:29
板凳
Alice 发表于 2017-5-11 09:31
谢谢您的反馈。
您的问题我已经重现了。
看到您在程序中调用了SelectionChanging事件,并在事件中调用如 ...

是的
问题就出现在那个地方
代码里我也有相关的注释
如果数据不多 没有出现滚动条的情况下 并没有出现这个问题,
如果数据多了出现了滚动条 就会存在这个问题。
这只是我自己发现的一种能重复再现的情况,同样代码不同操作 还能导致这样的问题,只不过我只出现过一次。这个地方存在着潜在的问题。

之所以这样写是想要在changing的时候只想拿到当前处于编辑行的row的DataItem  跟我之前的数据做一个比较
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-5-11 12:04:04
地板
q406157290 发表于 2017-5-11 09:45
是的
问题就出现在那个地方
代码里我也有相关的注释

谢谢反馈。
了解您的需求了。
我们测试下给您反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-5-11 15:56:00
5#
Alice 发表于 2017-5-11 12:04
谢谢反馈。
了解您的需求了。
我们测试下给您反馈。

这个问题挺严重的
希望尽快得到回复
谢谢!!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2017-5-11 17:06:22
6#
q406157290 发表于 2017-5-11 15:56
这个问题挺严重的
希望尽快得到回复
谢谢!!

您好。
我们进行了测试和调查。
我们的设计每次filter都会commit之前处于编辑状态的行,不管是否报错,您都是无法通过changing事件拿到处于编辑行的DataItem进行比较。
changing方法的设计是为了在选中区域发生变化的时候让用户知道我们要remove哪些,要添加哪些到新的range里面。并不能满足您的需求。
我们有提供其他的方法去获取编辑状态的行,比如你可以在BeganEdit 这个方法里面拿到row和column信息,而不是changing方法。

你无法通过示例中的方式取到想要的结果。
当然,如果您这么做还有其他的需求,那麻烦您提供完整的需求,我们再给您多的建议。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-5-11 17:16:57
7#
Alice 发表于 2017-5-11 17:06
您好。
我们进行了测试和调查。
我们的设计每次filter都会commit之前处于编辑状态的行,不管是否报错, ...

回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-5-11 17:16:59
8#
本帖最后由 q406157290 于 2017-5-12 08:56 编辑
Alice 发表于 2017-5-11 17:06
您好。
我们进行了测试和调查。
我们的设计每次filter都会commit之前处于编辑状态的行,不管是否报错, ...


Filter 的时候先commit 然后就没有处于编辑状态下的Row也可以理解
但是我只是通过Linq 去Rows里面查找下看看还有没有处于编辑状态的Row
但这也不应该程序崩溃掉啊, 只是我我没能拿到编辑的行而已

而且代码中也有注释
如果只写changing里的If判断 或者是不写If判断直接去查找当前编辑的行 程序也是没有崩溃掉,只有两个同时写了程序崩溃掉了

我想找到崩溃的原因,因为我们客户那边还有不同的重新的操作,只是我这边没有重现,我就怕selectiochaning这避免了这个问题,别的地方再会有这种问题
不知道原因 改的也不放心

我最终的需求是这样的



本帖子中包含更多资源

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

x
回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2017-5-12 09:28:51
9#
您好,
第一我先解答您的一个疑问,就是在同一窗体上,两个datagrid是不会同时处于编辑状态,这跟鼠标聚焦点是有关系的,如果您正在编辑右侧datagrid,一旦鼠标聚焦点不在右侧datagrid,就会提交修改结果,所以你所担心的问题不可能发生的。
第二您是为了选择当前行未改变的内容,changing顾名思义是正在改变,可能行内容已经发生变化,所以我们不在此处获取行内容,建议您使用BeganEdit方法,更符合您的需求。
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
q406157290
高级会员   /  发表于:2017-5-12 09:31:04
10#
本帖最后由 q406157290 于 2017-5-12 09:41 编辑
JeffryLI 发表于 2017-5-12 09:28
您好,
第一我先解答您的一个疑问,就是在同一窗体上,两个datagrid是不会同时处于编辑状态,这跟鼠标聚焦 ...

你回答的一个问题不知能您自己试没试过
同一窗体 两个DataGrid可以同时处于编辑状态互不影响

changing的时候并不管Row里的内容到底有没有变  我的目地是在changing的时候 当前DataGrid的SelectedIndex 还没有变(如果我后续的逻辑出现CheckError 我想在changing的时候给e.AddedRanges里的更换成原来的行)
changed的时候才发生变化
你们可以不用考虑我这边要实现什么逻辑  我给的Demo非常简单 我只在changing的时候去查找了下处于编辑状态的Row  但是我并没有去改变任何东西没有改变任何值
程序崩溃 这合理???

本帖子中包含更多资源

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

x
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部