我正在尝试使用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并修复操作。
答案 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,它应该只覆盖它。
如果有其他方法可以解决这个问题,请告诉我。