问题描述
我正在使用剑道网格和网格.在特定情况下,我使用 grid.dataSource.add()
方法将数据添加到网格的数据源中.以下是配置我的网格.
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();
}
其中 detailsData
和 gridData
是 ajax 的响应.我的问题是这个方法向网格添加新数据.但是点击编辑和取消删除时从网格中选择的行.通常当网格中的项目没有唯一 id 时会发生这种情况.但我检查过,这些项目都有唯一的 id.这段代码有什么问题.如何解决这个错误.提前致谢.
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.
推荐答案
您的记录正在被删除,因为您取消编辑时刚刚添加的数据正在被破坏.
Your record is being removed because the just added data is being destroyed when you cancel the edition.
跟踪 destroy
方法,当你点击 cancel
和 destroy
时,你会看到它被调用,因为实际上有从未在服务器中创建(在 create
处理程序上进行跟踪,您将看到它没有被调用).
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).
并且 create
没有被调用,因为当您将它们添加到 for
循环中时,您会分配一个 id
.
And create
is not being invoked because when you add them in the for
loop you assign an 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
不好,但提前分配不好.
Conclusion: it is bad not assigning id
but it is bad assigning it to early.
这篇关于剑道网格取消导致删除行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!