如何更新jqgrid中的数据值

Wil*_*ill 14 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);
}
Run Code Online (Sandbox Code Playgroud)

这不是循环遍历本地加载的数组中的所有项目.例如,如果页面大小设置为30,则alert(j)返回30,尽管我在本地加载了多少项目.但是,如果我刷新图形,则j是正确的数字.为什么getGridParam的行为在每种情况下都不同?

Ole*_*leg 31

如果你使用loadonce: true你应该知道哪里的本地数据将被保留的jqGrid.jqGrid有两个选项:data_index.的data是,每一个项目都有name属性作为项目的阵列name从列的属性colModel.如果需要通过id(rowid)找到项目,可以使用数组中_index[rowid]带有rowid的项目data.因此,要更改列中的数据,'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;
Run Code Online (Sandbox Code Playgroud)

更新:您可以使用记录的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;
Run Code Online (Sandbox Code Playgroud)

  • @WildBill:`dataArray [indexes [rowid]] .personName`或`dataArray [indexes [rowid]] ['personName']`将只更改*internal*jqGrid数据,但不包含`<td> `网格的元素.你可以修改内部数据并调用`trigger('reloadGrid')`,但是`setCell`的用法更好,因为网格的完全重新加载. (2认同)