0

我有一个 Kendo Grid,我在其中定义了这样的编辑器:

        @(Html.Kendo().Grid(Model.Data)
        .Name("GridINT")
        .Editable(editable => editable
            .Mode(GridEditMode.PopUp)
            .TemplateName("MyTemplateName")
            .Window(w => w.Width(500))
            .Window(w => w.Title("My Template")))

在使用编辑器之前,我将 mouseup 处理程序绑定到行,并调整命令按钮的样式。当编辑器关闭时,无论是通过提交、取消还是“X”,我的处理程序和样式调整都将消失在受影响的行中。我需要恢复它们,但我没有找到有效的事件。我已经像这样绑定取消点击事件:

    $('.k-grid-cancel').bind('click', function ( e ) {
    colorCommandCells();
});

但是如果我在这里将我的处理程序/样式恢复为网格行,编辑器的关闭过程会撤消我所做的事情。

底线:我怎么知道编辑器已经完成了对网格的更新(正如我所描述的那样,即使编辑器被取消了)以及编辑器弄乱了哪一行?

这是为命令单元格着色的代码:

    function colorCommandCells() {
    // This block colors the command cell according to ISNEW.  It must run every time the DataBound event occurs.
    var grid = $("#GridINT").data("kendoGrid");
    var gridData = grid.dataSource.view();
    for (var i = 0; i < gridData.length; i++) {
        var currentUid = gridData[i].uid;
        var currentRow = grid.table.find("tr[data-uid='" + currentUid + "']");
        var editButton = $(currentRow).find(".k-grid-edit");
        var aColor = gridData[i].ISNEW == 1 ? "#FFCCFF" : "transparent";
        var aText = gridData[i].ISNEW == 1 ? "Add" : "Edit";
        var parent = $(editButton).closest("td");
        $(parent[0]).css('background-color', function () { return aColor; });
        editButton[0].innerHTML = "<span class=\"k-icon k-edit\"></span>" + aText;
    }
}
4

2 回答 2

1

基本上每次这样操作后Grid都会反弹,最好是使用附加到Grid的tbody的委托事件,或者每次发生Grid的dataBound事件时绑定事件。

于 2013-10-01T19:21:39.333 回答
0

这个答案有两个部分:首先,在为 Grid 构建 DataSource 时,为 Sync Event 分配一个函数。

.Events(e => e.Sync("syncGrid"))

此外,在构建 Grid 时,将函数分配给 Cancel 事件。

.Events(e => e.DataBound("gridIsDataBound").Cancel("cancelEditor").Edit("gridEdit"))

您必须同时拥有两者,因为如果弹出编辑器通过“提交”关闭,同步事件将触发,如果弹出编辑器通过“取消”或“X”关闭,取消事件将触发。这两个函数都应该像这样调用,其中 colorACommandCell 是我恢复样式值的地方:

function closeEditor() {
    var timer;
    clearTimeout(timer);
    timer = setTimeout(colorACommandCell, 100);
}

在编辑器关闭后,仍有一些与 Grid 相关的活动(这破坏了我的风格调整)。我发现,如果我将“修复”排队等待 0.1 秒,那么它们不会被覆盖。但是,理想情况下,我希望在编辑器真正完成时触发更确定的事件。我不希望能够在每台运行我的代码的机器上信任这个计时器。

于 2013-10-02T23:07:18.343 回答