我正在使用带有详细子网格的Kendo Grid。遗憾的是,我很难将其更新。我们为每个项目都有自己的自定义弹出编辑器(不是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定义的示例代码。
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
});
感谢您的帮助。我将努力尝试完成它。
答案 0 :(得分:1)
这一行:
outterGridDataSource.data = dataForGrid.Data.Data;
应该是
outterGridDataSource.data(dataForGrid.Data.Data);
(你的问题中缺少很多代码,所以这主要是猜测)
答案 1 :(得分:0)
问题实际上是:
需要覆盖outterGrid.dataSource.transport.read。我们构建的插件假设您永远不会有子网格,并将数据的变量名称硬编码到读取函数中。用以下代码覆盖此功能:
outterGrid.dataSource.transport.read = function(o){
o.success(dataForGrid.Data.Data);
}
这有效,必须在调用outterGrid.dataSource.read();
之前执行