q406157290 发表于 2017-5-10 21:53:25

C1DataGrid 的大bug 急急急!!!!

本帖最后由 q406157290 于 2017-5-10 22:00 编辑





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

Alice 发表于 2017-5-11 09:31:35

谢谢您的反馈。
您的问题我已经重现了。
看到您在程序中调用了SelectionChanging事件,并在事件中调用如下代码:
   if (dataGrid.SelectedIndex > -1)
            {
                var editItem = dataGrid.Rows.FirstOrDefault(m => m != null && m.IsEditing);
            }
请问您写这段代码的需求是什么?我们好给您找相应的解决方案。

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
是的
问题就出现在那个地方
代码里我也有相关的注释


谢谢反馈。
了解您的需求了。
我们测试下给您反馈。

q406157290 发表于 2017-5-11 15:56:00

Alice 发表于 2017-5-11 12:04
谢谢反馈。
了解您的需求了。
我们测试下给您反馈。
这个问题挺严重的
希望尽快得到回复
谢谢!!

Alice 发表于 2017-5-11 17:06:22

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

你无法通过示例中的方式取到想要的结果。
当然,如果您这么做还有其他的需求,那麻烦您提供完整的需求,我们再给您多的建议。

q406157290 发表于 2017-5-11 17:16:57

Alice 发表于 2017-5-11 17:06
您好。
我们进行了测试和调查。
我们的设计每次filter都会commit之前处于编辑状态的行,不管是否报错, ...

q406157290 发表于 2017-5-11 17:16:59

本帖最后由 q406157290 于 2017-5-12 08:56 编辑

Alice 发表于 2017-5-11 17:06
您好。
我们进行了测试和调查。
我们的设计每次filter都会commit之前处于编辑状态的行,不管是否报错, ...

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

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

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

我最终的需求是这样的



JeffryLI 发表于 2017-5-12 09:28:51

您好,
第一我先解答您的一个疑问,就是在同一窗体上,两个datagrid是不会同时处于编辑状态,这跟鼠标聚焦点是有关系的,如果您正在编辑右侧datagrid,一旦鼠标聚焦点不在右侧datagrid,就会提交修改结果,所以你所担心的问题不可能发生的。
第二您是为了选择当前行未改变的内容,changing顾名思义是正在改变,可能行内容已经发生变化,所以我们不在此处获取行内容,建议您使用BeganEdit方法,更符合您的需求。

q406157290 发表于 2017-5-12 09:31:04

本帖最后由 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但是我并没有去改变任何东西没有改变任何值
程序崩溃 这合理???

页: [1] 2 3
查看完整版本: C1DataGrid 的大bug 急急急!!!!