滚动浏览大量记录时,jqGrid的大小调整行为会发生变化

时间:2016-06-24 20:26:05

标签: jqgrid free-jqgrid

我最近将jqGrid从旧版本(4.4.5)升级到(4.13.4-pre)

"autowidth": false,
"shrinkToFit": true,
"loadonce": true,
"scroll": 1,

FWIW - 我在镶板布局中使用它(通过jQuery UI Layout实现)

一切都很好,两个版本最初加载我的数据并显示良好 - 无需更改我的启动网格选项或colModel等。

enter image description here

但是,如果我将鼠标悬停在数据区域上并使用滚轮开始滚动数据,最终4.13.4版本的jqGrid将闪烁或刷新以构建下一页数据并且#39 ;当它引入这里显示的不需要的滚动条状态时:

enter image description here

我已经有一些调整大小的逻辑,以便在调整父面板大小时,网格捕捉到正确的位置 - 与用户调整窗口大小时相同。所有这些功能在两个版本的jqGrid上都能正常运行 -

想知道在此期间我是否遗漏了一些东西 - 但我觉得我发现了一个错误。

更新

我已经能够将jqGrid控件与前面提到的jquery UI Layout脚本隔离开来。不良行为仍然存在。

当页面加载完毕后,我将这样的脚本调用到"补丁"我的jqGrid的宽度和大小,所以它适合所需的父DIV:

function patchUpJQGrid_FitInParentDiv() {
    var newWidth, newHeight, myGridCtrl;

    myGridCtrl = $("#mainGridControl");

    newWidth = $("#parentMainGridDiv").width() - 50;
    newHeight = $("#parentMainGridDiv").height() - 50;

    myGridCtrl.jqGrid('setGridWidth', newWidth, false);
    myGridCtrl.jqGrid('setGridHeight', newHeight);
}

window.setTimeout(patchUpJQGrid_FitInParentDiv, 5000);//ensure jqGrid correctly sized

因此,在上面的脚本运行之后,UI都已正确设置和调整大小..但随后您开始滚动(使用鼠标滚轮或使用滚动条),最终网格宽度忽略最初通过&#39指示的内容; setGridWidth'现在,如果你想继续滚动,父DIV本质上是掩盖或遮蔽你需要的垂直滚动条..

有关详细信息,请参阅下面接受的答案。我想提一下,这些添加的选项(从另一个Oleg答案中复制)正在帮助我在我的jqGrid实例中实现我想要的东西(参见updated jsfiddle demo

    cmTemplate: { autoResizable: true },
    autoResizing: { compact: true },
    autoresizeOnLoad: true

1 个答案:

答案 0 :(得分:1)

在jqGrid中使用的某些jqGrid选项在使用scroll: 1时是错误的。您使用patchUpJQGrid_FitInParentDiv修复了旧jqGrid中的问题。要使代码在免费的jqGrid中工作,您只需要修复jqGrid的原始选项。

选项中的主要问题是使用height: 'auto'并指定无width选项。如果您使用scroll: 1,那就错了。应为heightwidth选项指定任何固定值。您可以稍后修改这些值,但初始值非常重要,并且会修改调整大小的行为。

您需要做的是更改选项

    ...
    pager: '#pager1',
    altRows: true,
    altclass: 'myAltRowClass',
    rownumbers: true,
    gridview: true,
    rowNum: 50,
    rowList: [50, 100, 250],
    height: 'auto',
    caption: "Test Queue",
    scrollOffset: 2,
    viewrecords: true,
    sortorder: 'desc',
}

    pager: '#pager1',
    altRows: true,
    altclass: 'myAltRowClass',
    rownumbers: true,
    gridview: true,
    //rowNum: 50,
    //rowList: [50, 100, 250],
    //height: 'auto',
    width: 450,
    height: 404,
    caption: "Test Queue",
    //scrollOffset: 2,
    viewrecords: true
    //sortorder: 'desc',
}

更改后,可以删除patchUpJQGrid_FitInParentDiv的来电,因为不再需要。

我想强调的是,对于旧的jqGrid版本,严格推荐上述更改。免费的jqGrid需要进行更改。