我正在构建一个完全“客户端”的网格,但如果我启用内联编辑,如果我更改网格页面,我所做的更改将会丢失。
希望有人可以指出我缺少的东西
网格设置如下所示,以及我调用的用于填充测试数据的函数:
var myGrid;
var lastgridsel;
jQuery(document).ready(function() {
myGrid = jQuery("#mygrid").jqGrid({
datatype: 'local',
colModel: [
{ name: 'AID', label: 'AID', index: 'AID', width: 100, editable: false,
sorttype: "int" },
{ name: 'MS', label: 'MS', index: 'MS', width: 300, editable: false },
{ name: 'GROUP', label: 'GROUP', index: 'GROUP', width: 100,
editable: false },
{ name: 'REV', label: 'REV', index: 'REV', width: 100,
editable: false },
{ name: 'OPT', label: 'OPT', index: 'OPT', width: 100, editable: true,
edittype: 'text' }
],
pager: '#mypager',
rowNum: 10,
rowList: [10, 20, 500],
viewrecords: true,
loadonce: true,
autowidth: true,
sortname: 'AID',
sortorder: 'desc',
cellsubmit: 'clientArray',
onSelectRow: function(id) {
if (id && id !== lastgridsel) {
jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray');
jQuery('#mygrid').editRow(id, true);
lastgridsel = id;
}
}
});
});
var mydata = [];
function InitNew() {
for (var i = 0; i < 100; i++) {
mydata.push({ AID: i, MS: "123", GROUP: "456", REV: "78", OPT: "8" });
}
myGrid.setGridParam({ data: mydata }).trigger("reloadGrid");
}
这显示10页,100条记录。如果单击“OPT”列,我可以更改文本框中的值,当我单击另一行时,数据似乎已保存。但是,一旦我转到另一个页面并返回到第一页,数据将恢复为原始值。
答案 0 :(得分:2)
我不确定它是否是3.7.x版本中的错误,但目前如果您保存有关内联编辑(saveRow
或editRow
方法)的本地数据,则内部jqGrid的数据参数将未修改。
要解决此问题,您可以定义类似
的功能var myAfterSave = function(rowid, response) { // aftersavefunc
var index = parseInt(rowid, 10);
var d = myGrid.getGridParam("data");
var rowdata = myGrid.getRowData(rowid);
d[rowdata.AID].OPT = rowdata.OPT;
};
并修改行
jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray');
jQuery('#mygrid').editRow(id, true);
到行
jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray', null, myAfterSave);
jQuery('#mygrid').editRow(id, true, null, null, 'clientArray', null, myAfterSave);
答案 1 :(得分:0)
摘要:如果使用纯客户端代码构建网格,则需要替换
myGrid.setGridParam({ data: mydata }).trigger("reloadGrid");
与
myGrid.setGridParam({ data: mydata });
myGrid[0].refreshIndex();
myGrid.trigger("reloadGrid");