我正在尝试在加载时永久更新jqgrid中的单元格。我知道我可以使用setCell
,但只更新该页面的值。如果我没有明确地为单元格执行另一个setCell
,则返回页面,显示旧值。我也尝试过setRowData,但似乎做了同样的事情。我正在使用loadonce
,因为我的方法是1)加载数据2)根据一些标准修改一些数据值3)显示修改后的值。我正在使用loadonce
时不应该有办法在此会话中永久修改单元格吗?
更新:
我的代码中没有给出错误但未能遍历所有数据:
var set = 0;
....
gridComplete: function(data){
setData();
},
....
beforeRefresh: function(data){
set = 0;
},
....
function setData(){
if(set == 1) return;
... //create hash up here
var dataArray = jQuery("#grid").jqGrid('getGridParam', 'data');
var j = 1;
for (var rows in dataArray) {
var key = dataArray[rows].name;
dataArray[rows].level = hashTable[key];
j++;
}
alert(j);
}
这不会循环遍历本地加载的数组中的所有项目。例如,如果页面大小设置为30,则alert(j)
返回30,尽管我在本地加载了多少项。但是,如果我刷新图形,则j是正确的数字。为什么getGridParam的行为在每种情况下都不同?
答案 0 :(得分:31)
如果您使用loadonce: true
,您应该知道 ,jqGrid将保留本地数据。 jqGrid有两个选项:data
和_index
。 data
是项目数组,其中每个项目都具有name属性作为name
列的colModel
属性。如果需要按id(rowid)查找项目,可以使用_index[rowid]
到data
数组中带有rowid的项目。因此,要更改列'myColumn'
中的数据,您应该执行以下操作:
// first change the cell in the visible part of grid
myGrid.jqGrid('setCell', rowid, 'myColumn', newValue);
// now change the internal local data
var dataArray = myGrid.jqGrid('getGridParam', 'data'),
indexes = myGrid.jqGrid('getGridParam', '_index');
dataArray[indexes[rowid]].myColumn = newValue;
更新:您可以使用记录的getLocalRow方法更改本地数据:
// first change the cell in the visible part of grid
myGrid.jqGrid('setCell', rowid, 'myColumn', newValue);
// now change the internal local data
myGrid.jqGrid('getLocalRow', rowid).myColumn = newValue;
答案 1 :(得分:0)
对于所有从谷歌来到这里的人来说,这是一个更新的答案!
重要的是索引,可以通过调用getInd-Method获得。因为rowID!= localRowData的索引。 (eq.rowId:jqg204,Index:5)
编辑:如果设置"键:true"在colmodel中你可以设置你自己的rowId(不同于我的例子" jqg ###",通常是数据库表中的PK)
var ind = myGrid.getInd(rowId);
var localRowData = myGrid.jqGrid('getLocalRow', ind);
localRowData.myColumn = newValue;
希望有所帮助!
答案 2 :(得分:0)
我遇到了类似的问题:
我需要在某个用户操作(不相关)时更新一行
为此,我需要知道“数据”对象中的确切行,即使在对表进行一些过滤后也是如此
所以我找到了一种方法来识别哪一行被更改了 - 我在'loadComplete'事件中为'data'对象的每个项添加了一个RowID属性:
loadComplete: function () {
if (firstRun) {
firstRun = false;
var dataArray = $('#jqGrid').jqGrid('getGridParam', 'data');
$(dataArray).each(function (index) {
dataArray[index].RowID = index + 1;
});
}
}
现在,在格式化程序代码中,我能够访问rData.RowID以识别执行操作的确切行,并获取/设置其“数据”表示