如何更新jqgrid中的数据值

时间:2012-02-04 22:27:47

标签: jquery 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的行为在每种情况下都不同?

3 个答案:

答案 0 :(得分:31)

如果您使用loadonce: true,您应该知道 ,jqGrid将保留本地数据。 jqGrid有两个选项:data_indexdata是项目数组,其中每个项目都具有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以识别执行操作的确切行,并获取/设置其“数据”表示