0

我正在使用带有详细信息子网格的剑道网格。不幸的是,我很难让它更新。我们为每个项目都有自己的自定义弹出编辑器(不是剑道的自定义版本,而是完全不同的弹出窗口,因为我们必须满足其他要求。)

完成 ajax 调用后,弹出窗口上的保存按钮使用以下回调来刷新网格。这似乎不起作用。我已经在详细信息部分测试了一个项目的更新。网格完全崩溃,我没有错误,但是重新展开网格时,有问题的项目没有改变。然而,完全关闭网格并重新打开网格确实有效。

        function refreshData() {
        if (!settings.dataUrl)
            return;

        $.ajax({
            type: "POST",
            url: settings.dataUrl,
            data: new Object(),
            dataType: "json",
            contentType: "application/json"
        }).done(function (data, textStatus, jqXhr) {
            // Perform mapping function on data
            if (settings.mapperFunction) {
                data = settings.mapperFunction(data, settings.pageSettings);
            }
            var dataForGrid = data;
            if (settings.transformGridDataCallback)
                dataForGrid = settings.transformGridDataCallback(JSON.parse(JSON.stringify(dataForGrid)));

            settings.unfilteredTotal = dataForGrid.Data.Data.length;
            outterGridDataSource.data = dataForGrid.Data.Data;
            outterGridDataSource.read();


        });

    };

下面是为子网格定义 DetailInit 的示例代码。

detailInit: function (e) {


                    var innerColumns = [
                       ...column definitions
                    ];

                    var $detail = $("<div />").addClass("grid_detail class");
                    $detail.append($("<div />").addClass("grid inner_grid"));

                    //#region Problems Details
                    $detail.find(".inner_grid").kendoGrid({
                        scrollable: false,
                        editable: false,
                        dataSource: {
                            data: e.data.subItems,
                            transport: { //need this for Kendo Grid to handle updates properly
                                read: function (o) {
                                    o.success(e.data.subItems);
                                },
                                create: function (o) {

                                },
                                update: function (o) {

                                },
                                destroy: function (o) {
                                    o.success();

                                }
                            },
                            schema: {
                                model: { 
                                    id: "Id", 
                                    fields: {
                                        display: { defaultValue: settings.pageSettings.stringvalue1 }
                                    }
                                }
                            }
                        },
                        columns: innerColumns

                    });

感谢您提供任何帮助。我将努力完成它。

4

2 回答 2

1

这一行:

outterGridDataSource.data = dataForGrid.Data.Data;

应该是

outterGridDataSource.data(dataForGrid.Data.Data);

(您的问题中缺少很多代码,因此主要是猜测)

于 2014-01-31T18:27:11.640 回答
0

问题实际上是:

outterGrid.dataSource.transport.read 需要被覆盖。我们在上面构建的插件假设您永远不会有子网格,并将数据的变量名称硬编码到读取函数中。用以下内容覆盖此函数:

outterGrid.dataSource.transport.read = function(o){
o.success(dataForGrid.Data.Data);
}

这是有效的,必须在调用 outterGrid.dataSource.read(); 之前执行。

于 2014-02-05T20:05:35.577 回答