Dee*_*pak 7 kendo-ui kendo-grid
打开Kendo网格批量编辑后,我知道您可以挂钩创建,更新和销毁命令,当您单击"保存更改"时,Kendo将向服务器发送3个单独的命令.
我想知道是否有任何方法可以将所有三组更新作为单个调用发送到服务器 - 就像一个事务.或者甚至按照指定的顺序发送每个,并在发送下一个之前检查成功.
我能想到的唯一方法是有一个自定义的Save Changes实现,当被调用时,它会查找网格数据源以查找已添加的所有行(isNew()用于添加的行),删除(已删除行的_destroyed) ),更新(isDirty用于更新的行),然后使用ajax使用识别的数据集自己调用服务器端点.
Mik*_*ike 13
Telerik最近在他们的代码库中发布了一个解决方法:http://www.kendoui.com/code-library/mvc/grid/save-all-changes-with-one-request.aspx.不幸的是,解决方案相当简单.它提供了一个很好的示例,说明如何捕获被破坏的,脏的和新的记录,但是只需挥手就可以处理响应中的任何错误并在成功时同步数据源.另请注意,在进行ajax请求之前,不会检查以确保存在已销毁,脏或新记录.
这是相关的代码.从上面的链接下载完整的示例,以查看网格的设置方式并确保您拥有最新版本.
function sendData() {
var grid = $("#Grid").data("kendoGrid"),
parameterMap = grid.dataSource.transport.parameterMap;
//get the new and the updated records
var currentData = grid.dataSource.data();
var updatedRecords = [];
var newRecords = [];
for (var i = 0; i < currentData.length; i++) {
if (currentData[i].isNew()) {
//this record is new
newRecords.push(currentData[i].toJSON());
} else if(currentData[i].dirty) {
updatedRecords.push(currentData[i].toJSON());
}
}
//this records are deleted
var deletedRecords = [];
for (var i = 0; i < grid.dataSource._destroyed.length; i++) {
deletedRecords.push(grid.dataSource._destroyed[i].toJSON());
}
var data = {};
$.extend(data, parameterMap({ updated: updatedRecords }), parameterMap({ deleted: deletedRecords }), parameterMap({ new: newRecords }));
$.ajax({
url: "/Home/UpdateCreateDelete",
data: data,
type: "POST",
error: function () {
//Handle the server errors using the approach from the previous example
},
success: function () {
alert("update on server is completed");
grid.dataSource._destroyed = [];
//refresh the grid - optional
grid.dataSource.read();
}
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14147 次 |
| 最近记录: |