手动更改数据源时在网格上显示脏单元格三角形

时间:2016-10-07 08:38:05

标签: javascript kendo-ui kendo-grid

我有一个带有自定义弹出编辑窗口的kendo网格来模仿弹出编辑,但是有批量编辑。一切正常,但我遇到了一个小问题。每当更改值时,网格单元格的角落中没有红色三角形,表示此特定值与原始值不同。

据我在本文中所理解,数据源中手动更改不会出现在网格上,因此我必须手动添加它们。

这篇文章' manually maintain dirty cell marker on paging in Kendo grid'给出了如何让它工作的想法。我可以将一些听众附加到kendoWindow输入,跟踪正在编辑的字段,比较旧值和新值......

但实现此功能是否有一种不太痛苦的方法?也许有一些内置的剑道功能来实现这一目标?

这是一个小工作示例http://dojo.telerik.com/aSaXe/4

2 个答案:

答案 0 :(得分:1)

红色"脏"使用built-in in-cell editing时,标记会自动显示为 。从这个角度来看,您的方案要求在关闭自定义编辑弹出窗口后手动添加这些内容。

您可能会发现数据项的change事件在任务中很有用。每次更改弹出窗口中的值并且相应的文本框模糊时,它将被触发。

var uid = $(e.target).parents('tr').attr('data-uid');
var grid = $('#grid').data("kendoGrid");
var dataItem = grid.dataSource.getByUid(uid);

dataItem.bind("change", function(args) {
  // args.field
});

最后,请记住,Grid dataSource中的每个更改都会导致重绘整个表(除非使用了内置的单元格内编辑),因此您将丢失以前应用的任何自定义样式。

答案 1 :(得分:0)

您可以按以下方式在剑道网格上使用save事件:

save: function (e) {
                    addDirtyUid(e.model.uid);
                    setTimeout(refreshVisualDirtyElements, 100);
                }

其他功能和变量:

var dirtyIds = [];
function addDirtyUid(currentUid) {
    if (dirtyIds.indexOf(currentUid) === -1) {
        dirtyIds.push(currentUid);
    }
}

function refreshVisualDirtyElements() {
    for (var i = 0; i < dirtyIds.length; i++) {
        var thisUid = dirtyIds[i];
        $("tr[data-uid='" + thisUid + "']").find("td:eq(0)").addClass("k-dirty-cell");
        $("tr[data-uid='" + thisUid + "']").find("td:eq(0)").prepend('<span class="k-dirty"></span>');
    }
}