首页 文章

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

提问于
浏览
1

浏览器:IE 9

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

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

  • 用户点击一个单元格

  • 用户编辑单元格中的文本

  • 用户点击列 Headers

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

任何帮助表示赞赏 .

2 回答

  • 0

    版本:kendoui.aspnetmvc.2013.2.716

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

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

    • 网格列可重新排序 . (.Reorderable(r => r.Columns(true))// Kendo htmlhelper code)

    • 在服务器上完成排序

    • 用户编辑单元格中的文本,然后单击列 Headers

    如果删除可重新排序设置,则datasource的hasChanges()方法返回true . 打开此问题的支持服务单 .

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

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

相关问题