我正在使用带有详细信息子网格的kendo网格。不幸的是,我很难更新它。我们为每个项目都有自己的自定义弹出编辑器(不是Kendo的自定义版本,而是完全不同的弹出式编辑器,因为我们还必须满足其他要求。)
弹出窗口上的保存按钮完成后,其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: 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
});
感谢您的任何帮助。我将努力尝试完成它。
此行:
outterGridDataSource.data = dataForGrid.Data.Data;
可能应该是
outterGridDataSource.data(dataForGrid.Data.Data);
(您的问题中缺少很多代码,因此主要是猜测)
实际上是:
Outtergrid.datasource.transport.Read需要过多写。我们在假设上构建的插件将永远不会具有子网格和硬编码为读取功能的数据名称。用:
覆盖此功能outterGrid.dataSource.transport.read = function(o){
o.success(dataForGrid.Data.Data);
}
这起作用,必须在调用oftergrid.datasource.read();