我目前正在使用 struts2 的 JQuery 插件。我想知道如何重新加载 JQuery 网格而不丢失当前滚动位置和折叠行。
为了重新加载网格中的数据,我使用以下 JavaScript 代码:
var timerID = setInterval("RefreshGridData()", 5000);
function RefreshGridData() {
$("#griditems").trigger("reloadGrid");
}
网格的jsp如下:
<s:url id="itemsurl" action="getItemsJson.action" />
<s:url id="subitemsurl" action="getSubItemsJson.action" />
<sjg:grid id="griditems" caption="Items and Subitems" dataType="json"
href="%{itemsurl}" pager="false" viewrecords="true" height="400"
gridModel="gridModel" rowNum="-1" sortable="true">
<sjg:grid id="gridsubitems" subGridUrl="%{subitemsurl}"
gridModel="gridModel" rowNum="-1">
<sjg:gridColumn name="subcol1" index="subcol1" title="SubColumn 1"
width="120" />
<sjg:gridColumn name="subcol2" index="subcol2" title="SubColumn 2"
align="left" width="120" />
</sjg:grid>
<sjg:gridColumn name="col1" index="col1" title="Column 1" sortable="true"
width="80"/>
<sjg:gridColumn name="col2" index="col2"
title="Column 2" sortable="true" />
<sjg:gridColumn name="col3" index="col3" title="Column 3"
sortable="true" />
</sjg:grid>
欢迎就如何实现这一点提出任何意见。
提前致谢。
最佳答案
var scrollPosition = 0
function RefreshGridData() {
scrollPosition = jQuery("#griditems").closest(".ui-jqgrid-bdiv").scrollTop()
$("#griditems").trigger("reloadGrid");
}
在事件 loadComplete 中加载数据后
jQuery("#griditems").closest(".ui-jqgrid-bdiv").scrollTop(scrollPosition)
编辑:
var ids = new Array();
jQuery("#jqgrid_id").jqGrid({
...
gridComplete: function(){
var rowIds = $("#jqgrid_id").getDataIDs();
$.each(ids, function (index, data) {
if (data == 1){
$("#jqgrid_id").expandSubGridRow(rowId);
}
});
},
subGridRowExpanded: function(pID, id){
ids[id] = 1;
},
subGridRowColapsed: function(pID, id){
ids[id] = 0;
},
...
});
不确定这是否有效,我没有测试它,它应该是这样的
编辑
setGridParam - 不知道它是否适用于事件,但你可以尝试一下
我找不到如何使用struts中的标签库将subGridRowExpanded附加到pick,但尝试在标签库构建网格后更改配置
$("#griditems").setGridParam({subGridRowExpanded: function(pID, id){ ids[id] = 1;}});
$("#griditems").setGridParam({subGridRowColapsed: function(pID, id){ ids[id] = 0;}});
$("#griditems").setGridParam({gridComplete: function(){
var rowIds = $("#jqgrid_id").getDataIDs();
$.each(ids, function (index, data) {
if (data == 1){
$("#jqgrid_id").expandSubGridRow(rowId);
}
});
}});
编辑
好的不同方法:
var scrollPosition = 0
var ids = new Array();
function RefreshGridData() {
ids = new Array();
$('tr:has(.sgexpanded)').each(function(){ids.push($(this).attr('id'))});
scrollPosition = jQuery("#griditems").closest(".ui-jqgrid-bdiv").scrollTop()
$("#griditems").trigger("reloadGrid");
}
当网格加载完成时:
jQuery.each(ids, function (id,data) {
$("#jqgrid_id").expandSubGridRow(data);
jQuery("#griditems").closest(".ui-jqgrid-bdiv").scrollTop(scrollPosition);
});
关于jquery - 如何重新加载 JQuery 网格保持滚动位置和折叠元素打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5706703/