1

浏览器:IE 9

上下文:填充了可编辑、可排序(服务器端)的 KendoUI 网格。

问题:目标是在有任何未保存的更改时弹出一条消息。

  • 用户单击单元格
  • 用户编辑单元格中的文本
  • 用户点击列标题

网格的数据源没有捕捉到编辑。数据项的脏属性为假。Kendo UI 网格始终对列进行排序。我一直无法找到拦截排序事件并警告用户并取消排序事件的方法。

任何帮助表示赞赏。

4

2 回答 2

0

版本:kendoui.aspnetmvc.2013.2.716

要取消排序事件,请在数据源的 requestStart 事件中调用 event.preventDefault()。

如果数据源的 hasChanges() 方法返回 false

  • 网格列是可重新排序的。(.Reorderable(r => r.Columns(true)) //Kendo htmlhelper 代码)
  • 排序在服务器上完成
  • 用户编辑单元格中的文本并单击列标题

如果删除 Reorderable 设置,数据源的 hasChanges() 方法将返回 true。打开此问题的支持票。

同时,如果您想在用户编辑单元格并单击列标题时使用 hasChanges() 方法捕获编辑,请不要将 Reorderable 设置为 true。

于 2013-08-21T21:46:35.833 回答
0

这是一个演示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()
        }
    });
})
于 2013-09-06T13:31:31.240 回答