jqGrid 从服务器问题刷新
jqGrid Refresh From Server Issue
我有一个可以正常加载的 Struts2 jqGrid 页面。单击导航器刷新按钮时,我希望它从服务器重新加载网格。
<sjg:grid
altRows="false"
id="gridtable"
dataType="json"
editurl="%{editurl}"
filter="true"
filterOptions="{stringResult:true}"
gridModel="gridModel"
gridview="true"
height="600"
href="%{remoteurl}"
loadonce="true"
navigator="true"
navigatorAdd="%{editPermission}"
navigatorAddOptions="{
closeAfterAdd:false,
closeOnEscape:true,
reloadAfterSubmit:true,
addCaption:'Add Record'}"
navigatorDelete="false"
navigatorEdit="%{editPermission}"
navigatorEditOptions="{
closeAfterEdit:false,
closeOnEscape:true,
afterSubmit:function(response, postdata) {
return isError(response.responseText);
}
}"
navigatorRefresh="true"
navigatorSearch="false"
onCompleteTopics="loadComplete"
onSelectRowTopics="rowselect"
onEditInlineBeforeTopics="beforeFormLoad"
pager="true"
pagerButtons="true"
rowList="25,50,100"
rowNum="25"
rownumbers="true"
>
单击刷新按钮时,我有以下绑定将数据类型设置为 json。
$("#refresh_gridtable").bind("click", function(){
$("#gridtable").jqGrid("setGridParam", {datatype: 'json'});
return [true];
});
但是,当我单击刷新按钮时,它只会在每隔一次单击时从服务器重新加载数据。如果我对特定列执行客户端排序,然后单击刷新,则第一次单击时不会从服务器重新加载,第二次单击时将在没有排序的情况下从服务器刷新(排序图标此时在顶部仍然可见)列),那么第三次点击不会访问服务器,但会应用排序。
如何让刷新每次都从服务器重新加载,然后应用任何现有的 sort/filter 字段?
解决方案在一定程度上取决于您使用的底层 jqGrid。如果你使用 free jqGrid 4.9 那么你可以使用 navGrid
的附加选项:reloadGridOptions: { fromServer: true }
.
如果您使用旧版本的 jqGrid,那么您可以在重新加载之前直接使用回调 beforeRefresh
将 datatype
重置为 "json"
。我自己不使用 Struts2。所以我不知道你在哪里可以指定回调beforeRefresh
或者,您可以使用 navigatorRefresh="false"
从导航栏中删除标准刷新按钮并使用 navigatorExtraButtons
,这似乎是 navButtonAdd 的替代品。如果我正确理解该选项,您可以指定 onclick
的免费代码,它可以满足您的所有需求。您可以使用 icon: "ui-icon-refresh"
使自定义按钮看起来与标准的刷新按钮完全一样。在 onclick
中你可以设置 datatype: 'json'
并触发 "reloadGrid"
.
我有一个可以正常加载的 Struts2 jqGrid 页面。单击导航器刷新按钮时,我希望它从服务器重新加载网格。
<sjg:grid
altRows="false"
id="gridtable"
dataType="json"
editurl="%{editurl}"
filter="true"
filterOptions="{stringResult:true}"
gridModel="gridModel"
gridview="true"
height="600"
href="%{remoteurl}"
loadonce="true"
navigator="true"
navigatorAdd="%{editPermission}"
navigatorAddOptions="{
closeAfterAdd:false,
closeOnEscape:true,
reloadAfterSubmit:true,
addCaption:'Add Record'}"
navigatorDelete="false"
navigatorEdit="%{editPermission}"
navigatorEditOptions="{
closeAfterEdit:false,
closeOnEscape:true,
afterSubmit:function(response, postdata) {
return isError(response.responseText);
}
}"
navigatorRefresh="true"
navigatorSearch="false"
onCompleteTopics="loadComplete"
onSelectRowTopics="rowselect"
onEditInlineBeforeTopics="beforeFormLoad"
pager="true"
pagerButtons="true"
rowList="25,50,100"
rowNum="25"
rownumbers="true"
>
单击刷新按钮时,我有以下绑定将数据类型设置为 json。
$("#refresh_gridtable").bind("click", function(){
$("#gridtable").jqGrid("setGridParam", {datatype: 'json'});
return [true];
});
但是,当我单击刷新按钮时,它只会在每隔一次单击时从服务器重新加载数据。如果我对特定列执行客户端排序,然后单击刷新,则第一次单击时不会从服务器重新加载,第二次单击时将在没有排序的情况下从服务器刷新(排序图标此时在顶部仍然可见)列),那么第三次点击不会访问服务器,但会应用排序。
如何让刷新每次都从服务器重新加载,然后应用任何现有的 sort/filter 字段?
解决方案在一定程度上取决于您使用的底层 jqGrid。如果你使用 free jqGrid 4.9 那么你可以使用 navGrid
的附加选项:reloadGridOptions: { fromServer: true }
.
如果您使用旧版本的 jqGrid,那么您可以在重新加载之前直接使用回调 beforeRefresh
将 datatype
重置为 "json"
。我自己不使用 Struts2。所以我不知道你在哪里可以指定回调beforeRefresh
或者,您可以使用 navigatorRefresh="false"
从导航栏中删除标准刷新按钮并使用 navigatorExtraButtons
,这似乎是 navButtonAdd 的替代品。如果我正确理解该选项,您可以指定 onclick
的免费代码,它可以满足您的所有需求。您可以使用 icon: "ui-icon-refresh"
使自定义按钮看起来与标准的刷新按钮完全一样。在 onclick
中你可以设置 datatype: 'json'
并触发 "reloadGrid"
.