KendoUI Grid:如果有任何挂起的更改,则无法拦截和取消排序事件

时间:2013-08-20 16:47:18

标签: kendo-ui kendo-grid

浏览器:IE 9

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

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

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

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

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

版本:kendoui.aspnetmvc.2013.2.716

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

如果

,则数据源的hasChanges()方法返回false
  • 网格列可重新排序。 (.Reorderable(r => r.Columns(true)) // Kendo htmlhelper code)
  • 在服务器上完成排序
  • 用户编辑单元格中的文本,然后单击列标题

如果删除了Reorderable设置,则datasource的hasChanges()方法返回true。 打开此问题的支持服务单。

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

答案 1 :(得分:0)

以下是展示KendoUI Grid issue

的视频

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()
        }
    });
})