我添加ID为“new”的新行。在我指定为id(例如“代码”)的列中使用新值保存行之后,除非我重新加载网格或删除行&使用新ID再次添加。
保存行后是否还有另一个更改rowid的函数?
感谢。
答案 0 :(得分:1)
您可以使用jQuery.attr设置包含id
的任何属性。您应该非常小心地更改id
属性。例如,如果您使用loadonce: true
选项或使用datatype: 'local'
,则存在内部data
和_index
参数,这些参数会将当前ID缓存到行数据映射。因此,在这种情况下,您需要更新jqGrid的_index
参数。
如果您遇到实施问题,请发布您当前使用的代码。 jqGrid的一些选项(如datatype
,loadonce
)非常重要。另外,了解哪个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。