最近在写一个小工具,工具都已经完成上线运行有段时间了,时不时的总会报一个“'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"