gpt4 book ai didi

jquery - loadonce :true 未发生 jqgrid 的重新加载

转载 作者:行者123 更新时间:2023-12-01 00:46:16 27 4
gpt4 key购买 nike

我是使用 jqgrid 的新手。

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

我的应用组合是JSP、Servlet、MySQL

我有一个具有以下设置的网格

jQuery("#userList").jqGrid({
url: '<%=request.getContextPath()%>/userJqGrid?q=1&action=fetchData&userCookie=<%= encodedCookie%>',
datatype: 'xml',
mtype: 'GET',
colNames:['<%= userProp.getProperty(userColNames[0])%>',
'<%= userProp.getProperty(userColNames[1])%>',
'<%= userProp.getProperty(userColNames[2])%>',
'<%= userProp.getProperty(userColNames[3])%>',
'<%= userProp.getProperty(userColNames[4])%>',
'<%= userProp.getProperty(userColNames[5])%>'
],
colModel:[
{name:'<%= userColNames[0]%>',index:'<%= userColNames[0]%>',
width:120,sortable:true,editable:true,editrules:{required:true},formoptions:{rowpos:1, elmprefix:'*'}},
{name:'<%= userColNames[1]%>',index:'<%= userColNames[1]%>',
width:130,sortable:true,editable:true},
{name:'<%= userColNames[2]%>',index:'<%= userColNames[2]%>',
width:100,sortable:true,editable:true,editrules:{required:true},formoptions:{rowpos:3, elmprefix:'*'}},
{name:'<%= userColNames[3]%>',index:'<%= userColNames[3]%>',
width:180,sortable:true,editable:true,editrules:{email:true,required:true},formoptions:{rowpos:4, elmprefix:'*'}},
{name:'<%= userColNames[4]%>',index:'<%= userColNames[4]%>',
width:100,sortable:true,editable:true},
{name:'<%= userColNames[5]%>',index:'<%= userColNames[5]%>',
width:100,sortable:true,editable:true},
],
pager: '#pager1',
rowNum:50,
height:'auto',
//rowList:[10,20,30],
loadonce: true,
sortname:'<%= userColNames[0]%>',
viewrecords: true,
editurl:'<%=request.getContextPath()%>/userJqGrid?q=1&action=addData&userCookie=<%= encodedCookie%>',
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}]);

应该可以工作。请参阅here有关 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:要在“添加”和“编辑”操作后强制重新加载网格,您可以使用 afterSubmit 事件,该事件将在接收成功的服务器响应之后但在 reloadGrid 由 jqGrid 制作。

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,则可能需要在添加操作后重新加载 。您可以设置reloadAfterSubmit: false并在服务器响应中返回新的ID。请参阅thisthis详细答案。

关于jquery - loadonce :true 未发生 jqgrid 的重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com