SetRowData和DirtyCells

我正在使用SetRowData在jqGrid中设置一些行数据

jqColModel = gJqGrid.jqGrid('getGridParam','colModel'); rowData = gJqGrid.jqGrid('getRowData', rowid); for (var i=0; i<newData.length; i++){ rowData[jqColModel[i+1].name] = newData[i]; } gJqGrid.jqGrid('setRowData', rowid, rowData); 

这是按预期工作的。 正在使用newData对象中的值更新jqGrid行。

然后我尝试使用所有修改过的单元格

 jqRows = gJqGrid.jqGrid('getChangedCells', 'dirty'); 

但这似乎不起作用。 我正在尝试批量处理所有更改并创建自定义保存事件

我的网格定义如下

 $(gJqSel_Table).jqGrid({ caption : 'jqGrid' , datatype : 'local' , loadonce : true , data : formattedLineData , colNames : customColNames , colModel : customColModel , autoencode : true , rowNum : 1000 , keys : true , sortable : false , hidegrid : false , multiselect : false , altRows : false , height : '100%' , autowidth : true , shrinkToFit : true , cellEdit : gSettings.editMode , cellsubmit : 'clientArray' , afterEditCell : function (rowid) { var $editControl = $("#" + rowid).find("input, select, textarea"); if ($editControl){ $editControl.on('paste', function(e) { GridPaste(e, rowid); }); } } }); 

有人可以就我的方式提供一些指导

  • 使用JSON对象设置行的所有单元格值

  • 将行中的每个单元格标记为脏,以便getChangedCells方法知道值已更改?

在更多地阅读了jqGrid文档后,我发现了这一点

setRowData

编辑行或单元格时,请勿使用此方法。 这将设置内容并覆盖输入元素。

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods

更改我的代码以使用setCell方法

  • 单元格值已更新
  • 单元格被标记为脏并包含在getChangedCells结果中

我的代码如下

 jqColModel = gJqGrid.jqGrid('getGridParam','colModel'); for (var i=0; i 

更新

正如@Oleg在评论中指出的那样,我还必须添加以下内容来将jqGrid 标记为已编辑:

 gJqGrid.setRowData(rowid, false, 'edited');