我正在使用kendo网格和网格。在特定情况下,我使用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();
}
detailsData
和gridData
是ajax的响应。我的问题是这个方法会向网格添加新数据。但是点击编辑并取消会从网格中删除选定的行。通常,当网格中的项目没有唯一的id时,就会发生这种情况。但是我检查过并且所有项目都有唯一的id.Whats错误的代码。如何解决这个错误。提前谢谢。
答案 0 :(得分:3)
您的记录正在删除,因为您取消版本时正在销毁刚刚添加的数据。
在destroy
方法上放置跟踪,当您点击cancel
并调用destroy
时,您将看到它被调用,因为实际上从未在服务器中创建过({1}}跟踪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
结论:不分配{{1}}是错误的,但很难将其分配给早期。