调整浏览器大小时调整 jqGrid 的大小?

IT技术 javascript jquery jqgrid grid resize
2021-02-01 05:42:55

当浏览器窗口调整大小时,有没有办法调整jqGrid的大小?我已经尝试过这里描述的方法但该技术在 IE7 中不起作用。

6个回答

已经在生产中使用它一段时间了,没有任何抱怨(可能需要进行一些调整以在您的网站上看起来正确......例如,减去侧边栏的宽度等)

$(window).bind('resize', function() {
    $("#jqgrid").setGridWidth($(window).width());
}).trigger('resize');
在这种情况下也非常有用:setGridWidth 的第二个参数是“shrink”。 stackoverflow.com/questions/7745009/...
2021-04-06 05:42:55
斯蒂芬,你看到 jmav 的解决方案了吗?这似乎是最好的,但我想看看你如何将它与这种方法进行对比
2021-04-11 05:42:55

作为后续:

这篇文章中显示的先前代码最终被放弃,因为它不可靠。按照 jqGrid 文档的建议,我现在使用以下 API 函数来调整网格大小:

jQuery("#targetGrid").setGridWidth(width);

要进行实际的调整大小,将实现以下逻辑的函数绑定到窗口的调整大小事件:

  • 使用其父级的 clientWidth 和(如果不可用)其 offsetWidth 属性计算网格的宽度。

  • 执行健全性检查以确保宽度变化超过 x 像素(以解决一些特定于应用程序的问题)

  • 最后,使用 setGridWidth() 更改网格的宽度

这是处理调整大小的示例代码:

jQuery(window).bind('resize', function() {

    // Get width of parent container
    var width = jQuery(targetContainer).attr('clientWidth');
    if (width == null || width < 1){
        // For IE, revert to offsetWidth if necessary
        width = jQuery(targetContainer).attr('offsetWidth');
    }
    width = width - 2; // Fudge factor to prevent horizontal scrollbars
    if (width > 0 &&
        // Only resize if new width exceeds a minimal threshold
        // Fixes IE issue with in-place resizing when mousing-over frame bars
        Math.abs(width - jQuery(targetGrid).width()) > 5)
    {
        jQuery(targetGrid).setGridWidth(width);
    }

}).trigger('resize');

和示例标记:

<div id="grid_container">
    <table id="grid"></table>
    <div id="grid_pgr"></div>
</div>
如果您需要支持 IE,您可能希望通过计时器限制调整大小的频率。
2021-03-21 05:42:55
如果我想更改 jqgrid 的添加/编辑形式的 css 怎么办?
2021-04-05 05:42:55
想详细说明?当在没有改变网格宽度的情况下调用 resize 事件时,我在 IE 上遇到了问题,这导致了网格本身的奇怪行为。这就是代码在步骤 2 中考虑阈值的原因。
2021-04-13 05:42:55

自动调整大小:

对于 jQgrid 3.5+

        if (grid = $('.ui-jqgrid-btable:visible')) {
            grid.each(function(index) {
                gridId = $(this).attr('id');
                gridParentWidth = $('#gbox_' + gridId).parent().width();
                $('#' + gridId).setGridWidth(gridParentWidth);
            });
        }

对于 jQgrid 3.4.x:

       if (typeof $('table.scroll').setGridWidth == 'function') {
            $('table.scroll').setGridWidth(100, true); //reset when grid is wider than container (div)
            if (gridObj) {

            } else {
                $('#contentBox_content .grid_bdiv:reallyvisible').each(function(index) {
                    grid = $(this).children('table.scroll');
                    gridParentWidth = $(this).parent().width() – origami.grid.gridFromRight;
                    grid.setGridWidth(gridParentWidth, true);
                });
            }
        }
也许您在 css 中定义的边框有问题 - 我做到了。
2021-03-19 05:42:55
在最新版本的 jqGrid 中,您可能希望在 setGridWidth() 调用中将 true 作为第二个参数传递。如果您不这样做,当表格调整大小时,表格中的列不会调整大小。IE$(this).setGridWidth(gridParentWidth, true);
2021-03-19 05:42:55
好吧,我可以确认上面的 3.5+ 版本在 IE9 上与 jqGrid 4.4.1 配合得很好,但是对于 FireFox 16 和 17,每次我调整浏览器宽度时,表格都会稍微变宽。
2021-03-30 05:42:55

这对我来说似乎很好用

$(window).bind('resize', function() {
    jQuery("#grid").setGridWidth($('#parentDiv').width()-30, true);
}).trigger('resize');
为什么在您的示例中有 -30?
2021-03-29 05:42:55
感谢您的解决方案,但它没有正常工作,就像它改变了整个 div,但不申请标题。:(
2021-04-05 05:42:55
我不确定。那是 5 年前 :(
2021-04-13 05:42:55

我使用 960.gs 进行布局,所以我的解决方案如下:

    $(window).bind(
        'resize',
        function() {
                    //  Grid ids we are using
            $("#demogr, #allergygr, #problemsgr, #diagnosesgr, #medicalhisgr").setGridWidth(
                    $(".grid_5").width());
            $("#clinteamgr, #procedgr").setGridWidth(
                    $(".grid_10").width());
        }).trigger('resize');
// Here we set a global options

jQuery.extend(jQuery.jgrid.defaults, {
    // altRows:true,
    autowidth : true,
    beforeSelectRow : function(rowid, e) { // disable row highlighting onclick
        return false;
    },
    datatype : "jsonstring",
    datastr : grdata,  //  JSON object generated by another function
    gridview : false,
    height : '100%',
    hoverrows : false,
    loadonce : true,
    sortable : false,
    jsonReader : {
        repeatitems : false
    }
});

// Demographics Grid

$("#demogr").jqGrid( {
    caption : "Demographics",
    colNames : [ 'Info', 'Data' ],
    colModel : [ {
        name : 'Info',
        width : "30%",
        sortable : false,
        jsonmap : 'ITEM'
    }, {
        name : 'Description',
        width : "70%",
        sortable : false,
        jsonmap : 'DESCRIPTION'
    } ],
    jsonReader : {
        root : "DEMOGRAPHICS",
        id : "DEMOID"
    }
});

// 下面定义的其他网格...