Question

Est-il possible de redimensionner une jqGrid lorsque la fenêtre du navigateur est redimensionnée? J'ai essayé la méthode décrite ici mais cette technique ne fonctionne pas dans IE7.

Était-ce utile?

La solution 2

En tant que suivi:

Le code précédent indiqué dans ce poste a finalement été abandonné parce qu'il était peu fiable. Je suis maintenant en utilisant la fonction API pour modifier la taille de la grille, tel que recommandé par la documentation jqGrid:

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

Pour faire le redimensionnement réel, une fonction mise en œuvre de la logique suivante est liée à l'événement de redimensionnement de la fenêtre:

  • Calculer la largeur de la grille à l'aide de sa mère et de clientWidth (si ce ne sont pas disponibles) offsetWidth son attribut.

  • Effectuer un contrôle de bon sens pour rendre la largeur que a changé plus de pixels x (pour contourner certains problèmes spécifiques à l'application)

  • Enfin, utilisez setGridWidth () pour modifier la largeur de la grille

Voici un exemple de code pour gérer le redimensionnement:

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');

exemple de balisage:

<div id="grid_container">
    <table id="grid"></table>
    <div id="grid_pgr"></div>
</div>

Autres conseils

utilise cette production depuis un certain temps sans aucune plainte (cela peut prendre quelques ajustements pour regarder à droite sur votre site .. par exemple, en soustrayant la largeur d'une barre latérale, etc)

$(window).bind('resize', function() {
    $("#jqgrid").setGridWidth($(window).width());
}).trigger('resize');

Auto resize:

Pour 3,5 jqGrid +

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

Pour 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);
                });
            }
        }

cela semble bien fonctionner pour moi

$(window).bind('resize', function() {
    jQuery("#grid").setGridWidth($('#parentDiv').width()-30, true);
}).trigger('resize');

J'utilise 960.gs pour la mise en page donc ma solution est la suivante:

    $(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"
    }
});

// Autres grilles définies ci-dessous ...

Emprunts à partir du code à votre lien, vous pouvez essayer quelque chose comme ceci:

$(window).bind('resize', function() { 
    // resize the datagrid to fit the page properly:
    $('div.subject').children('div').each(function() {
        $(this).width('auto');
        $(this).find('table').width('100%');
    });
});

De cette façon, vous êtes lier directement à l'événement window.onresize, qui ressemble vraiment à ce que vous voulez de votre question.

Si votre grille est réglée sur une largeur de 100% si elle devrait automatiquement lorsque son conteneur se développe, à moins qu'il ya quelques subtilités au plugin que vous utilisez que je ne sais pas.

Si vous:

  • avoir shrinkToFit: false (moyenne des colonnes à largeur fixe)
  • Vous autowidth: true
  • ne se soucient pas de hauteur du fluide
  • a barre de défilement horizontale

Vous pouvez faire la grille avec une largeur fluide avec des styles suivants:

.ui-jqgrid {
  max-width: 100% !important;
  width: auto !important;
}

.ui-jqgrid-view,
.ui-jqgrid-hdiv,
.ui-jqgrid-bdiv {
   width: auto !important;
}

Voici un de démonstration

La principale réponse a fonctionné pour moi, mais a fait l'application extrêmement insensible dans IE, donc j'utilisé une minuterie comme l'a suggéré. Code ressemble à ceci ($(#contentColumn) est le div que le jqGrid se trouve dans):

  function resizeGrids() {
    var reportObjectsGrid = $("#ReportObjectsGrid");
    reportObjectsGrid.setGridWidth($("#contentColumn").width());
};

var resizeTimer;

$(window).bind('resize', function () {
    clearTimeout(resizeTimer);
    resizeTimer = setTimeout(resizeGrids, 60);
});

Bonjour les amateurs de débordement de pile. J'ai apprécié la plupart des réponses, et j'ai même mis voté en couple, mais aucun d'entre eux travaillaient pour moi sur IE 8 pour une raison étrange ... Je ne cependant courir dans ces liens ... Ce gars a écrit une bibliothèque qui semble travail. L'inclure dans vos projets adittion à jquery UI, jeter au nom de votre table et div.

http: // stevenharman. net / blog / archive / 2009/08/21 / création-un-fluide jquery-jqgrid.aspx

http://code.google.com/p/codeincubator/source/browse/#svn%2FSamples%2Fsteveharman%2FjQuery%2Fjquery.jqgrid.fluid%253Fstate%253Dclosed

autowidth: true

a parfaitement fonctionné pour moi. appris .

Cela fonctionne ..

var $targetGrid = $("#myGridId");
$(window).resize(function () {
    var jqGridWrapperId = "#gbox_" + $targetGrid.attr('id') //here be dragons, this is     generated by jqGrid.
    $targetGrid.setGridWidth($(jqGridWrapperId).parent().width()); //perhaps add padding calculation here?
});
<script>
$(document).ready(function(){    
$(window).on('resize', function() {
    jQuery("#grid").setGridWidth($('#fill').width(), false); 
    jQuery("#grid").setGridHeight($('#fill').height(),true); 
}).trigger('resize');      
});
</script>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top