1

我是剑道和剑道网格的新手,但我正在尝试学习如何使用主细节剑道网格,其中细节网格应该支持批量编辑。数据在本地 JavaScript 对象中可用。

这个 jsFiddle演示了我看到的问题。

以下是网格的创建方式- 请参阅 jsFiddle 以获取完整片段 -

$("#grid").kendoGrid({
    dataSource: items,
    detailInit: createDetail,
    columns: [
        { field: "Item", width: "200px" },
    ]
});

function createDetail(e) {
    $("<div/>")
        .appendTo(e.detailCell)
        .kendoGrid({
            dataSource: {
                batch:true,
                transport: {
                    read: function (options) {
                        options.success(e.data.SubItems);
                    }
                }
            },
            editable:true,
            pageable:true,
            toolbar: ["save", "cancel"],
            columns: [
                { field: "SubItem", title: "Sub Item", width: 200 },
                { field: "Heading1", title: "Heading 1", width: 100 }
            ]
        });
}
  1. 当您编辑网格中的项目并单击下一个单元格时,无论我单击何处,即使在相邻单元格中,详细信息网格都会自动折叠。当我再次打开它时,我在单元格中看不到更改指示器(红色缺口),但新值在那里。如果我要将保存连接到 ajax 调用,Kendo 会发送已编辑的正确详细信息项。

  2. 当我单击取消更改时没有任何反应。

如何让网格不折叠并查看更改指示器?

如何取消更改才能正常工作?

[更新] - 进一步调查显示,如果我使用较旧的 Kendo 版本 2011.3.1129 ,这将按预期工作。但如果我使用较新的 2012.3.1114,则不会。不知道这是错误还是行为变化。

4

1 回答 1

0

经过一番努力,我发现原因似乎是主网格自动重新绑定导致我观察到的行为。我能够通过处理主网格中的 dataBinding 事件并在其中检查是否有任何详细数据源是脏的,如果是,则调用 preventDefault。

以下是相关的代码片段:

    dataBinding: function (e) {
               if (masterGrid.AreChangesPending()) {
                   e.preventDefault();
               } 
    }

    AreChangesPending : function () {
        var pendingChanges = false;
        // I gave each detail div an id so that I can get a "handle" to it 
        $('div[id^="detail_"]').each(function (index) {
            var dsrc = $(this).data("kendoGrid").dataSource;
            $.each(dsrc._data, function () {
                if (this.dirty == true || this.isNew()) {
                    pendingChanges = true;
                }
            });

            // For some reason, Kendo did not detect new rows in the isNew() 
            // call above, hence the check below
            if (dsrc._data.length != dsrc._total) {
                pendingChanges = true;
            }
        });

        return pendingChanges;
    }
于 2013-04-16T17:10:51.113 回答