SetRowData和DirtyCells

时间:2014-07-21 09:31:18

标签: javascript jquery jqgrid

我使用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方法知道值已更改?

1 个答案:

答案 0 :(得分:0)

在阅读了jqGrid文档后,我发现了这个

  

<强> setRowData

     

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

     

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

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

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

我的代码如下

jqColModel = gJqGrid.jqGrid('getGridParam','colModel');
for (var i=0; i<newData.length; i++){
    colName = jqColModel[i].name;
    gJqGrid.jqGrid('setCell', rowid, colName, newData[i], 'dirty-cell');
}

<强> 更新

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

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