2012-02-27 53 views
0

我添加了id为“new”的新行。在我将该行保存为指定为id的列(称为“代码”)后,将保留id为“new”,除非我重新加载网格或删除行&再次使用新的ID添加它。如何更改rowid

是否有另一个功能来保存该行后更改rowid?

谢谢。

回答

1

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

如果您在执行过程中遇到问题,您应该发布您当前使用的代码。 jqGrid的某些选项(如datatypeloadonce)非常重要。此外重要的是要知道哪些editing mode和哪些你使用。

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; 
} 
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是必需的,因为jqgrid在调用aftersavefunc后恢复旧的行ID。