Kendo grid cancel causing deletion of row

爷,独闯天下 提交于 2019-12-02 07:17:10

问题


I am using kendo grid and the grid.And on a particular situation i am adding data to the datasource of the grid using grid.dataSource.add() method.The following is the configuration of my grid.

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",
                });

And i am adding the data to datasource by this way

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();
            }

Where detailsData and gridData are the response of a ajax.What my problem is that this method adds new data to the grid.But while click on edit and cancel deletes the selected row from the grid.Usually this happens when the items in the grid does not have a unique id.But i checked and the items all have a unique id.Whats wrong with this code.How to solve this error.Thanks in advance.


回答1:


Your record is being removed because the just added data is being destroyed when you cancel the edition.

Place a trace on destroy method and you will see it being invoked when you hit cancel and destroy is being invoked because the have actually never been created into the server (place a trace on create handler and you will see that it is not being invoked).

And create is not being invoked because when you add them in the for loop you assign an id.

Try the for loop as follow:

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();
}

Conclusion: it is bad not assigning id but it is bad assigning it to early.



来源:https://stackoverflow.com/questions/16515343/kendo-grid-cancel-causing-deletion-of-row

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!