Kendo ui 剑道格网批量编辑-单次调用保存

Kendo ui 剑道格网批量编辑-单次调用保存,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,随着剑道网格批处理编辑功能的开启,我知道你可以钩住创建、更新和销毁命令,当你点击保存更改时,剑道将向服务器发送3个单独的命令 我想知道是否有任何方法可以将所有三组更新作为单个调用发送到服务器,就像事务一样。甚至可以按指定的顺序发送,并在发送下一个之前检查是否成功 我能想到的唯一方法是有一个自定义的savechanges实现,当调用该实现时,它将查找网格数据源以找出所有已添加的行(isNew()表示已添加的行)、已删除的行(_destromed表示已删除的行)、已更新的行(isDirty表示已更新

随着剑道网格批处理编辑功能的开启,我知道你可以钩住创建、更新和销毁命令,当你点击保存更改时,剑道将向服务器发送3个单独的命令

我想知道是否有任何方法可以将所有三组更新作为单个调用发送到服务器,就像事务一样。甚至可以按指定的顺序发送,并在发送下一个之前检查是否成功


我能想到的唯一方法是有一个自定义的savechanges实现,当调用该实现时,它将查找网格数据源以找出所有已添加的行(isNew()表示已添加的行)、已删除的行(_destromed表示已删除的行)、已更新的行(isDirty表示已更新的行)然后使用已识别的数据集使用ajax创建我自己对服务器端点的调用。

也许您可以启用
数据源的
批处理
属性

批处理布尔值(默认值:false)

如果设置为true,数据源将批处理CRUD操作请求。例如,更新两个数据项将导致一个HTTP请求而不是两个HTTP请求。默认情况下,数据源为每个CRUD操作发出HTTP请求


来源:

Telerik最近在他们的代码库中发布了一个变通方法:。不幸的是,这方面的工作相当简单。它提供了一个很好的示例,说明了如何捕获已销毁的、脏的和新的记录,但在结束时,需要挥手处理响应中的任何错误,并在成功时同步数据源。还要注意的是,在发出ajax请求之前,没有检查以确保有已销毁、脏记录或新记录

这是相关代码。从上面的链接下载完整的示例,查看网格是如何设置的,并确保您拥有最新的版本。

函数sendData(){
var grid=$(“#grid”).data(“kendoGrid”),
parameterMap=grid.dataSource.transport.parameterMap;
//获取新的和更新的记录
var currentData=grid.dataSource.data();
var updateRecords=[];
var newRecords=[];
对于(var i=0;i
六年后,我们有了答案,请检查提交功能以执行单个请求以保存所有更改:

谢谢@Romain。这就是我所说的批量编辑。我的数据源上确实设置了batch:true。Kendo将为一组更新的行发送一个HTTP请求,为所有已删除的行发送一个单独的销毁HTTP请求。但我希望所有更新、创建和删除都有一个HTTP请求。
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();
        }
    })
}