浏览器:IE 9
上下文:填充了可编辑、可排序(服务器端)的 KendoUI 网格。
问题:目标是在有任何未保存的更改时弹出一条消息。
- 用户单击单元格
- 用户编辑单元格中的文本
- 用户点击列标题
网格的数据源没有捕捉到编辑。数据项的脏属性为假。Kendo UI 网格始终对列进行排序。我一直无法找到拦截排序事件并警告用户并取消排序事件的方法。
任何帮助表示赞赏。
浏览器:IE 9
上下文:填充了可编辑、可排序(服务器端)的 KendoUI 网格。
问题:目标是在有任何未保存的更改时弹出一条消息。
网格的数据源没有捕捉到编辑。数据项的脏属性为假。Kendo UI 网格始终对列进行排序。我一直无法找到拦截排序事件并警告用户并取消排序事件的方法。
任何帮助表示赞赏。
版本:kendoui.aspnetmvc.2013.2.716
要取消排序事件,请在数据源的 requestStart 事件中调用 event.preventDefault()。
如果数据源的 hasChanges() 方法返回 false
如果删除 Reorderable 设置,数据源的 hasChanges() 方法将返回 true。打开此问题的支持票。
同时,如果您想在用户编辑单元格并单击列标题时使用 hasChanges() 方法捕获编辑,请不要将 Reorderable 设置为 true。
这是一个演示KendoUI Grid 问题的视频
来自 Telerik 的回应
基本上这是发生的,因为重新排序使用的事件是 mousedown 事件。当触发 mousedown 事件时,模型仍未更新。
作为一种解决方法,我可以建议您采用以下解决方案:
初始化网格后将其放入脚本块中。这样,如果 Grid 仍处于编辑模式,无论您是否进行了更改,都将阻止拖动。
$(function () {
var gr = $('#Grid').data().kendoGrid;
gr.thead.on('mousedown', function (e) {
if (gr.tbody.find('.k-edit-cell').length) {
e.stopImmediatePropagation()
}
});
})