【问题标题】:Kendo grid cancel causing deletion of row剑道网格取消导致删除行
【发布时间】:2013-05-13 05:22:59
【问题描述】:

我正在使用剑道网格和网格。在特定情况下,我使用grid.dataSource.add() 方法将数据添加到网格的数据源。以下是我的网格的配置。

var itemcodedataSource = new kendo.data.DataSource({
            dataType: "json",
            transport: {
                    read: function(o){
                       o.success([]);
                    },
                    create: function(o) {                      
                        var item = o.data;
                            //assign a unique ID and return the record
                            item.id =  len;
                            o.success(item);
                            len++;
                    },
                    destroy: function(o) {
                          o.success();
                    },
                    update: function(o){
                          o.success();
                    }         
            },                      
            autoSync: true,
            schema: {                       
            model: {
                id    : "id",
                fields: {
                        type_flag: {validation: {}},
                        item_code:{validation:{}},
                        bill_no:{validation:{}},
                        item_code_desc: {validation: {},editable:false},
                        line_balance:{validation:{},type:"number",editable:false},
                        collection_status:{validation:{},editable:false},
                        amount:{validation:{required:false},type:"number",nullable:false },
                        item_detail:{},
                        total_balance:{type:"number",nullable:false},
                        total_due:{type:"number",nullable:false},
                        amt_edit_flag:{},
                    }   
                }
            },
        });

        $("#itemcode_grid").kendoGrid({
                dataSource: itemcodedataSource,
                selectable: "multiple",
                change     : calcTotals,
                toolbar: ["create"],
                    columns:[
                                { field: "type_flag", width: "90px", title: "Type",sortable:false,
                                },
                                { field: "item_code", width: "80px", title: "Item Code",sortable:false
                                },
                                { field: "bill_no", width: "80px", title: "Bill Number",sortable:false
                                },
                                { field: "line_balance", width: "50px", title: "Deferrals",sortable:false
                                },
                                { field: "collection_status", width: "50px", title: "Hold",sortable:false
                                },
                                { field: "amount", width: "70px", title: "Payment",sortable:false
                                },
                                { command: ["edit", "destroy"], title: "Options", width: "130px"},
                            ],
                    editable: "inline",
                });

我正在通过这种方式将数据添加到数据源

var gridDs      =   $("#itemcode_grid").data("kendoGrid").dataSource;
            for (var i = 0; i < gridData.length; i++) {
                gridDs.add({
                    type_flag           : gridData[i].type_flag, 
                    item_code           : gridData[i].item_code,
                    bill_no             : detailsData[i].bill_no, 
                    item_code_desc      : detailsData[i].itemcode_details.item_code_desc,
                    line_balance        : gridData[i].line_deferred, 
                    collection_status   : detailsData[i].collection_status,
                    amount              : parseFloat(gridData[i].amount),
                    qty_pricing_type    : detailsData[i].itemcode_details.qty_pricing_type,
                    item_detail         : res[0][i],
                    total_balance       : parseFloat(detailsData[i].line_balance),
                    total_due           : detailsData[i].line_due,
                    id                  : gridDs._data.length+1,
                });

                gridDs.sync();
            }

detailsDatagridData 是 ajax 的响应。我的问题是此方法将新数据添加到网格中。但是单击编辑并取消时会从网格中删除选定的行。通常会发生这种情况当网格中的项目没有唯一的 id 时。但我检查了所有项目都有唯一的 id。这段代码有什么问题。如何解决这个错误。提前致谢。

【问题讨论】:

    标签: javascript jquery ajax kendo-ui kendo-grid


    【解决方案1】:

    您的记录正在被删除,因为您取消版本时刚刚添加的数据正在被破坏。

    destroy 方法上放置一个跟踪,当您点击canceldestroy 时,您将看到它被调用,因为实际上从未在服务器中创建过(在create 处理程序上放置跟踪你会看到它没有被调用)。

    并且create 没有被调用,因为当您将它们添加到for 循环中时,您分配了一个id

    尝试for循环如下:

    var gridDs      =   $("#itemcode_grid").data("kendoGrid").dataSource;
    for (var i = 0; i < gridData.length; i++) {
        gridDs.add({
            type_flag           : gridData[i].type_flag,
            item_code           : gridData[i].item_code,
            bill_no             : detailsData[i].bill_no,
            item_code_desc      : detailsData[i].itemcode_details.item_code_desc,
            line_balance        : gridData[i].line_deferred,
            collection_status   : detailsData[i].collection_status,
            amount              : parseFloat(gridData[i].amount),
            qty_pricing_type    : detailsData[i].itemcode_details.qty_pricing_type,
            item_detail         : res[0][i],
            total_balance       : parseFloat(detailsData[i].line_balance),
            total_due           : detailsData[i].line_due
        });
    
        gridDs.sync();
    }
    

    结论:不分配id不好,但早分配不好。

    【讨论】:

    • 完成了这项工作..感谢@Onabai 的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多