2011-08-27 51 views
1

jqGrid编辑后的行标识需要在保存后返回ID作为响应后刷新。 我尝试了下面的代码,但未定义的消息框出现。如何通过格式化程序保存按钮保存按钮后更新jqgrid行标识

如何更新行ID? 如何通过保存操作按钮更新行后的响应文本?

安德鲁斯

grid.jqGrid({ 
    colModel: [{name:_actions,width:45, 
    formatter:"actions", 
    formatoptions: 
    {keys:true, 
    delbutton:false, 
    onSuccess:function (rowID, response) { 
     alert(response);    
     $("#" + rowID).attr("id", response.responseText); 
     }, 

    onEdit: function (rowID) { 
    if (typeof (lastSelectedRow) !== 'undefined' && rowID !== lastSelectedRow) 
     cancelEditing($('#grid')); 
     lastSelectedRow = rowID; 
    } 
}} 

回答

2

我不想再回到我们的老讨论,但我只是想提醒的id变化是不是好的做法。

您可以尝试通过在setTimeout内部放置$("#" + rowID).attr("id", response.responseText);来解决问题。如果在内联编辑代码中处理旧ID后进行更改。

此外,您可以验证以下内容。在由jqGrid内部保存的其他地方重命名id可能很重要。例如,selrowselarrrow,其中所选行的ID将被保留。

+0

主要问题是操作按钮没有单个事件,其中旧的rowid和响应文本都在内联编辑aftersavefunc中传递。我通过在'onSuccess = function(jqXHR){actionRessect = jqXHR; 返回true; }“'和'afterSave =功能(ROWID){ aftersavefunc(ROWID,ActionResponse的)}'用这个。Db的方案使用自然主键ID和部署到成千上万的网站。改变这甚至造成重复的替代ID作为你推荐工作量太大,因为需要重写许多生产应用程序 – Andrus

+1

@安德鲁斯:好的,我知道如果安装了许多旧版本的软件,更新方案可能会很复杂,但我没有想到这个问题。我建议你不改变现有表的主键。我建议增加一个额外的** **在表列中自动增量值可以保存。在此之后,你可以把唯一约束或一个索引的列有快速搜索来自列的值并**仅将值作为id用于jqGrid **。在其他应用程序中,您可以继续使用旧的主键。可以工作 – Oleg

+1

@安德鲁斯:你应该小心地把'jqXHR'保存在某个地方。您应该编写代码,以便指针在未使用时分配给“null”。如果你不这样做,你可能有记忆韭菜,因为'jqXHR'的内存不能被释放。 – Oleg