如何改变rowid

时间:2012-02-27 11:17:49

标签: jqgrid

我添加ID为“new”的新行。在我指定为id(例如“代码”)的列中使用新值保存行之后,除非我重新加载网格或删除行&使用新ID再次添加。

保存行后是否还有另一个更改rowid的函数?

感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用jQuery.attr设置包含id的任何属性。您应该非常小心地更改id属性。例如,如果您使用loadonce: true选项或使用datatype: 'local',则存在内部data_index参数,这些参数会将当前ID缓存到行数据映射。因此,在这种情况下,您需要更新jqGrid的_index参数。

如果您遇到实施问题,请发布您当前使用的代码。 jqGrid的一些选项(如datatypeloadonce)非常重要。另外,了解哪个editing mode以及您使用哪个是很重要的。

答案 1 :(得分:1)

要更改id需要几步,因为jqGrid不会更改网格的主键,所以我们必须手动执行所有步骤:

var new_id = 39; //for example
aftersavefunc: function( old_id ) {

   //get data param
   var row = grid.jqGrid('getLocalRow', old_id);
   console.log(row); //use for firefox test
   row._id_ = new_id;

   grid.jqGrid('setRowData',old_id,{my_id:new_id});
   $("#"+response).attr("id", new_id); //change TR element in DOM

   //very important to change the _index, some functions using the                  
   var _index = grid.jqGrid('getGridParam', '_index');
   var valueTemp = _index[old_id];
   delete _index[old_id];
   _index[new_id] = valueTemp;
}

答案 2 :(得分:0)

jqgrid中的changeRowId函数:

function aftersavefunc(rowId, response) {

var json = $.parseJSON(response.responseText);
var $tr = $("#" + rowId);

    setTimeout(function () {
        $grid.jqGrid("changeRowid", rowId, json.Id);
        $grid.jqGrid('setSelection', json.Id);
        setFocusToGrid();
    }, 1000);
}

setTimeout是必需的,因为在调用aftersavefunc之后jqgrid会恢复旧的行ID。