JQGrid:编辑新添加的记录时,正在添加新行

时间:2014-12-14 04:09:55

标签: jquery jqgrid

我正在尝试使用JQgrid(4.7)来使用我们的项目。一切都按预期工作,除了一次警告。编辑新添加的记录时,jqgrid会向网格添加新行。我将reloadAfterSubmit设置为false,因为我将在网格上有大量数据,并且我不想为每次更改重新加载网格。

<script type="text/javascript">
jQuery(document).ready(function () {
   'use strict';
   var list = $("#list");

   var addPops =  {
                addCaption: "Add Record Set",
                recreateForm:true,
                reloadAfterSubmit:false,
                closeAfterAdd:true,
                width: 470,
                afterSubmit : function(response, postdata) {
                     return [true, "", response.responseJSON.rows[0].rowId];
                },
                afterComplete: function(response,postdata,formId) {
                    var id=postdata.id;
                    var rowId=response.responseJSON.rows[0].id;
                    list.setRowData(id,{"rowId":response.responseJSON.rows[0].rowId});
                    list.setRowData(id,{"sharing":response.responseJSON.rows[0].sharing});
                    list.setRowData(id,{"comments":response.responseJSON.rows[0].comments});
                    //list.setCell(id,{"rowId":response.responseJSON.rows[0].rowId});
                    //list.setCell(id,{"sharing":response.responseJSON.rows[0].sharing});
                    //list.setCell(id,{"comments":response.responseJSON.rows[0].comments});
                }
            };

   var editProps =  {
                editCaption: "Edit Record Set",
                recreateForm:false,
                reloadAfterSubmit:false,
                closeAfterEdit:true,
                width: 470
            };

   list.jqGrid({
    url: "/DmsClient/ZoneEditManaged.action?_eventName=getRecordSets&searchText=",
    datatype: "json",
    editurl: "/DmsClient/ZoneEditManaged.action?_eventName=applyRecordSetChange",
    colNames: ["Sharing", "Comments"],
    editCaption: "Edit Record Set",
    colModel: [
        { name: "sharing", width: 65,fixed:true, align: "left", editable:true, search:false},
        { name: "comments", width: 80, align: "left", editable:true, search:false,
            editoptions: {size: "60"} }
    ],
    pager: "#listPager",
    rowNum: 10,
    rowList: [10, 20, 30, 100, 500, 1000],
    sortname: "origin",
    sortorder: "desc",
    viewrecords: true,
    autoencode: true,
    height: 100,
    width: 700,
    multiselect: false,
    caption: "Record Sets",
  }).navGrid('#listPager',{add:true,edit:true,del:false,search:false},editProps,addPops); 
  });
</script>

另一个症状是编辑新创建的记录时,输入框为空。数据存在于表体中,但在编辑时不会在编辑表单中填充。最终结果是单击更新时,它会在网格中创建新记录。

看起来我错过了一些东西但却无法弄清楚它是什么。感谢任何帮助。

更新 从调试,看起来我没有将id从_empty更改为真实id,因此在编辑时,操作从编辑更改为添加。希望我可以使用aftercomplete事件来更改此ID并修复操作。

1 个答案:

答案 0 :(得分:1)

行。经过长时间的调试和尝试一些事情,我终于得到了这个工作。我不确定这是否是最优雅的工作方式。这是修复。

                afterSubmit : function(response, postdata) {
                     postdata["id"] = null;
                     return [true, "", response.responseJSON.rows[0].id];
                },

当添加行时,jqgrid调用afterSubmits并仅在postdata [id]为null时分配newId。并且在编辑表单的提交操作中,如果id为“_empty”表单添加新记录,否则更新它。

现在我认为当afterSubmit返回一个id时,无论postdata [id]是否为null,网格应该是新的id,它应该只覆盖它。

如果有其他方法可以解决这个问题,请告诉我。