使用loadonce重新加载jqgrid:true

我是使用jqgrid的新手。

在新页面加载时,网格正在从数据库中正确加载数据。 之后由于loadonce:true,网格没有从数据库重新加载数据以进行添加/编辑/删除。

我的应用程序组合是JSP,Servlet,MySQL

我有一个网格有以下设置

jQuery("#userList").jqGrid({ url: '/userJqGrid?q=1&action=fetchData&userCookie=', datatype: 'xml', mtype: 'GET', colNames:['', '', '', '', '', '' ], colModel:[ {name:'',index:'', width:120,sortable:true,editable:true,editrules:{required:true},formoptions:{rowpos:1, elmprefix:'*'}}, {name:'',index:'', width:130,sortable:true,editable:true}, {name:'',index:'', width:100,sortable:true,editable:true,editrules:{required:true},formoptions:{rowpos:3, elmprefix:'*'}}, {name:'',index:'', width:180,sortable:true,editable:true,editrules:{email:true,required:true},formoptions:{rowpos:4, elmprefix:'*'}}, {name:'',index:'', width:100,sortable:true,editable:true}, {name:'',index:'', width:100,sortable:true,editable:true}, ], pager: '#pager1', rowNum:50, height:'auto', //rowList:[10,20,30], loadonce: true, sortname:'', viewrecords: true, editurl:'/userJqGrid?q=1&action=addData&userCookie=', caption: 'User Grid', ondblClickRow: function(rowid) { $("#userList").jqGrid('editGridRow',rowid, userEditParam); return; } }); $("#userList").jqGrid('navGrid',"#pager1",{add:true,edit:true,del:true}); $("#userList").jqGrid('gridResize', { minWidth: 450, minHeight: 150}); 

我尝试添加以下代码来重新加载

 $("#userList").jqGrid('setGridParam',{datatype:xml}).trigger('reloadGrid') 

有人可以帮忙吗?

解决方案对我有用

 $("#userList").jqGrid('navGrid',"#pager1",{add:true,edit:true,del:true,refresh:true, beforeRefresh: function() { $("#userList").jqGrid('setGridParam',{datatype:xml}).trigger('reloadGrid'); }}, { afterSubmit: processAddEdit, closeAfterAdd:true, closeAfterEdit:true },{ aftersubmit:processAddEdit, closeAfterAdd:true, closeAfterEdit:true }); function processAddEdit() { $("#userList").jqGrid('setGridParam',{datatype:xml}).trigger('reloadGrid'); return[true,'']; //no error } 

正确是datatype:'xml'而不是datatype:xml 。 所以代码就好

 $("#userList").jqGrid('setGridParam', {datatype:'xml'}) .trigger('reloadGrid', [{page:1}]); 

应该管用。 有关reloadGrid的其他参数的说明,请参见此处 。

更新 :从您的评论中我希望我知道您的实施问题。 如果我理解你现在正确,你想要从导航栏中“重新加载网格”按钮从服务器重新加载网格。 为此,您应该使用您的实现重新定义标准的“重新加载网格”按钮,该按钮执行我在答案中包含的代码(参见上文)。 因此,您应该使用refresh: false作为navGrid选项来删除标准的“重新加载网格”按钮,然后使用navButtonAdd添加看起来与标准按钮完全相同的新按钮,并使用自定义实现或onClickButton事件:

 var myGrid = $('#userList'); myGrid.jqGrid({ datatype: 'xml', loadonce: true, pager: '#pager1', // ... other parameters which you use }); myGrid.jqGrid('navGrid', '#pager1', {refresh: false}); myGrid.jqGrid( 'navButtonAdd', '#pager1', { caption: "", buttonicon: "ui-icon-refresh", title: $.jgrid.nav.refreshtitle, onClickButton: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); $(this).trigger('reloadGrid', [{page:1}]); } } ); 

更新2 :要在Add和Edit操作之后强制重新加载网格,可以使用afterSubmit事件,该事件将在接收成功的服务器响应之后但在reloadGrid生成reloadGrid之前调用。

 myGrid.jqGrid('navGrid', '#pager1', {refresh: false}, { // Edit options afterSubmit: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'']; // no error } }, { // Add options afterSubmit: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'',false]; // no error and no new rowid } }, { // Delete options afterSubmit: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'']; // no error } } ); 

我不确定在编辑和删除操作之后是否真的需要从服务器重新加载网格,但如果服务器没有在服务器响应中返回新的id,则可能需要在Add操作之后重新加载。 您可以设置reloadAfterSubmit: false并在服务器响应中返回新的id。 有关详细信息,请参阅此和此答案。

谢谢,

  $("#list1").jqGrid('navGrid', '#pager1', {refresh: false}, { // Edit options afterSubmit: function () {$(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'']; // no error } }, { // Add options afterSubmit: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'',false]; // no error and no new rowid } }, { // Delete options afterSubmit: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'']; // no error } }); jQuery("#list1").jqGrid('navGrid','#pager1',{edit:true,add:true,del:true,view:false},{url: "product.php" },{closeAfterEdit: true,closeAfterAdd: true}); jQuery("#list1").jqGrid('gridResize',{minWidth:350,maxWidth:850,minHeight:80, maxHeight:350}).trigger('reloadGrid'); $('#list1').jqGrid('setGridParam', {datatype:'xml'}); $('#list1').trigger('reloadGrid', [{page:1}]); 

适合我。再次感谢很多。

 { // edit options zIndex: 100, url: '/User/Edit', closeOnEscape: true, closeAfterEdit: true, recreateForm: true, afterComplete: function (response) { if (response.responseText) { $("#userGrid").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid'); } } } 

为我工作:

逻辑是我们在调用返回到JqGrid之后再次重新加载网格….尝试它的工作原理