在WPF的DATAGRID中快速点击列头排序丢失和刷新数据报“在ADDNEW或EDITITEM事务过程不允许排序”的错误

最近在写一个小工具,工具都已经完成上线运行有段时间了,时不时的总会报一个“'Sorting' is not allowed during an AddNew or EditItem transaction.”的异常,

翻译过后是“在AddNew或EditItem事务中不允许“排序” ,也就是说告诉我,在Datagrid 行编辑状态时不允许排序!

好吧,秉着遇到问题解决问题的原则,开始。

1.问题重现

    发现,我的列表中的行是允许编辑和列排序的,这个是为了好对cell中的值进行一些人工文本上的操作和筛选,还有我在双击行时加了一个弹出窗口的事件,在关闭这个窗口后刷新列表。每次当我单击列表头部进行排序后,双击行弹出窗口再关闭都会报错!!!

2.分析定位问题原因

    单击列表头部进行排序,关闭窗口后再刷新列表报错,因为在双击打开窗口过程中触发了单元格的编辑状态,那么重新刷新列表报错的时候很可能就是因为数据正在编辑中,无法通过代码进行数据源的重新绑定,那么我在绑定数据源之前 退出的编辑模式试试吧!退出编辑模式有两种方式 

 第一种:

dgDataList.CancelEdit(DataGridEditingUnit.Row);

 第二种:

dgDataList.CommitEdit(DataGridEditingUnit.Row,true);

在绑定数据之前加入,加入后,再次单击列表头排序 再双击行后打开窗口,窗口关闭后刷新列表,不再有错啦。

搞定所有异常问题了,WPF 的DataGrid 启用行编辑后好多问题,没必要还是直接禁用吧!

后又发现新的问题!这个WPF 的DataGrid 还挺烦人~~,快速单击列表的头部时,发生排序功能丢失的情况!!!

好吧,继续发现问题,定位问题,解决问题~~~

最终发现如果在启用列表的列头顺序调整时

CanUserReorderColumns="True"

在快速单击列头排序时,如果数据量大一点的情况下,此列的排序功能就丢失了,由于我不需要列头的顺序调整,因此禁用此功能就好!改为False即可

CanUserReorderColumns="False"

 

posted @ 2018-04-06 14:43  Interface  阅读(681)  评论(0编辑  收藏  举报