2011-05-29 138 views
0

主键值用作从服务器返回的json数据中的行标识。 如果主键值被编辑和保存两次,第二次保存会导致错误,因为jqGrid 再次将原始主键值传递给编辑方法。jqGrid:如何编辑主键列时更新行号

如果在内联编辑中更改了主键值,如何将jqGrid行ID更新为新的主键值?

$(function() { 
     var grid = $("#grid"); 
     grid.jqGrid({ 
       url: '<%= ResolveUrl("~/Grid/GetData?_entity=Strings")%>', 
       datatype: "json", 
       mtype: 'POST', 
       scroll: 1, 
       autoencode: true, 
       colModel: [{ 
        name: 'Source', 
        fixed: true, 
        editable: true, 
        width: 30 
       }, { /* this is primary key passed also as id */ 
        name: 'Est', 
        fixed: true, 
        editable: true, 
        width: 271 
       }, { 
        name: 'Eng', 
        fixed: true, 
        editable: true, 
        width: 167 
       }], 
       gridview: true, 
       pager: '#pager', 
       viewrecords: true, 
       editurl: '<%= ResolveUrl("~/Grid/Edit?_entity=Strings")%>', 
     ... 
+0

如果用于编辑单独的表格我们可以使用reloadAfterSubmit:真的,刷新ID。 Mabe可以以某种方式刷新内联编辑的行。或者,我们可以在编辑方法请求完成后更改行ID – Andrus 2011-05-29 20:54:31

回答

4

其rowid为罢了的网格的对应<tr>元件的id属性的值。因此,要改变ROWID oldRowidnewRowid你应该做类似如下:

$("#" + oldRowid).attr("id", newRowid); 
+0

从所有主键列创建行ID,并使用urlencoded删除行ID中不允许的字符。 应该使用哪个事件来替换行ID? 如何查找替换的先前和新行ID值? – Andrus 2011-05-30 10:51:53

+0

@安德鲁斯:只有在你写出一个通用的解决方案时,才需要删除或转义特殊字符,这样的解决方案将会使用其他人不太了解他所做的事情。在你自己的解决方案中,你当然应该使用'ids'更合理的价值。所以你应该永远不需要转义角色的问题。如果你有这个问题,你应该使用'$ .jgrid.jqID'。 – Oleg 2011-05-30 11:24:51

+0

@安德鲁斯:关于事件的问题不能在不知情的情况下回答。例如,知道您使用哪种编辑模式非常重要。此外,我回答你只是为了说明如何解决id编辑问题。我认为不应该这样做。每一个好的数据库设计都意味着** ID不应该改变**。 – Oleg 2011-05-30 11:28:08

-1
#gridPreSeleccion = id grid 
grid multiselect=true 
function eliminarSeleccionados() { 
    var idsContribuyentesSelect = jQuery("#gridPreSeleccion").jqGrid('getGridParam', 'selarrrow'); 
    if(idsContribuyentesSelect.length == 0) { 
     jQuery.MessageAlertSath("Es necesario seleccionar una fila.") 
    } else { 
     var ids = jQuery("#gridPreSeleccion").jqGrid('getDataIDs'); 
     var a = ids.length; 
     var j = 0; 
     while(j == 0) { 
      if(jQuery("#gridPreSeleccion").jqGrid('getGridParam', 'selarrrow').length <= 0) { 
       j = 1; 
      } else { 
       for(var i = 0; i < a; i++) { 
        if(idsContribuyentesSelect[0] == ids[i]) { 
         jQuery('#gridPreSeleccion').delRowData(ids[i]); 
         break; 
        } 
       } 
      } 
     } 
    } 
}