jquery - 如何重新加载 JQuery 网格保持滚动位置和折叠元素打开

标签 jquery jqgrid struts2

我目前正在使用 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/

相关文章:

javascript - jQuery 弹出按钮 (php)

jquery - 如何使用持久性加载动态树时获取选定节点

javascript - ajax 调用后加载脚本或 CDN

java - 相当于 <bean :define> in struts 2

java - Struts2中不同action方法更改Form的action属性

javascript - 如何将迭代器的id从<a href ="">发送到javascript函数

javascript - CanvasJS - strip 线不显示

javascript - 可以通过调用 setColProp 来更改列格式化程序吗?

jquery - jqgrid - postData 提交之前的请求参数和数据

javascript - ajax成功后在复选框末尾添加一个按钮