如何更新jqgrid中的数据值

我正在尝试在加载时永久更新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的行为在每种情况下都不同?

如果你使用loadonce: true你应该知道jqGrid将保存本地数据的位置。 jqGrid有两个选项: data_indexdata是项目数组,其中每个项目都具有name属性作为colModel列的name属性。 如果需要通过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; 

对于所有来自谷歌的人来说,这是一个更新的答案!

重要的是索引,可以通过调用getInd-Method获得。 因为rowID!= localRowData的索引。 (eq.rowId:jqg204,Index:5)

编辑:如果在colmodel中设置“key:true”,你可以设置自己的rowId(与我的例子“jqg ###”不同,通常是来自数据库表的PK)

 var ind = myGrid.getInd(rowId); var localRowData = myGrid.jqGrid('getLocalRow', ind); localRowData.myColumn = newValue; 

希望有所帮助!

我有一个类似的问题:
我需要在某个用户操作(不相关)时更新一行。
为此,我需要知道’data’对象中的确切行,即使在对表进行一些过滤之后也是如此。
所以我找到了一种方法来识别哪一行被更改了 – 我在’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以识别执行操作的确切行,并获取/设置其“数据”表示