Redimensionner jqGrid en fonction du nombre de lignes?

Je veux que mon jqGrid rétrécit et se développe en fonction du nombre de lignes qu'il possède. Disons qu'il a actuellement 10 lignes, la hauteur de la jqGrid se rétrécira à 10 lignes (de sorte qu'aucune ligne vide Béante n'est exposée).

Si cependant il y a trop de lignes, la hauteur de la grille s'étendra à une valeur 'height' maximale et une barre de défilement apparaîtra.

21
demandé sur Rosdi Kasim 2009-12-29 06:48:10

7 réponses

C'est intégré dans la grille. Vous définissez height sur 100%. Il y a une démo sur cette page Si vous allez " avancé - > redimensionnement.

19
répondu Craig Stuntz 2009-12-29 14:30:02

Essayez:

jQuery(".ui-jqgrid-bdiv").css('height', jQuery("#bigset").css('height'));

Dans la fonction de rappel jQGrid loadComplete. #bigset est le id pour la table que j'ai utilisé. Cela a fonctionné parfaitement pour moi.

5
répondu Amit Aggarwal 2012-05-07 16:42:32

J'ai fait face au problème similaire et aucune des solutions n'a parfaitement fonctionné pour moi. Certains fonctionnent mais il n'y a pas de barre de défilement.

Voici Donc ce que j'ai fait:

jQuery("#grid").jqGrid('setGridHeight', Math.min(300,parseInt(jQuery(".ui-jqgrid-btable").css('height'))));

Ce code doit être placé dans le gestionnaire loadComplete et cela fonctionne bien. Le premier paramètre du calcul.min est la hauteur désirée quand il y a assez de données pour remplir la liste. Notez que cette même valeur doit être définie comme hauteur pour la grille. Ce script choisit le minimum de la hauteur réelle et la hauteur désirée de la grille. Donc, s'il n'y a pas assez de lignes, la hauteur de la grille est réduite, sinon nous avons toujours la même hauteur!

3
répondu Atticus 2011-01-07 10:37:33

Appelez la fonction ci-dessous depuis afterInsertRow et lors de la suppression d'une ligne:

function adjustHeight(grid, maxHeight){
    var height = grid.height();
    if (height>maxHeight)height = maxHeight;
    grid.setGridHeight(height);
}
2
répondu Pete Amundson 2010-02-18 16:38:37

Bien que la hauteur 100% a bien fonctionné dans la démo, cela n'a pas fonctionné pour moi. La grille est devenue beaucoup plus grande, peut-être qu'elle a essayé d'occuper la hauteur du div parent. La solution d'Amit a parfaitement fonctionné pour moi, merci! (Je suis nouveau en tant que contributeur ici, et j'ai donc besoin d'une "réputation" plus élevée pour marquer les votes:))

1
répondu msanjay 2010-07-15 16:51:57

Voici une méthode générique que j'ai trouvée basée sur la solution D'Amit. Il vous permettra de spécifier le nombre maximum de lignes à afficher. Il utilise la hauteur d'en-tête de la grille pour calculer la hauteur maximale. Il peut avoir besoin de tweeking si vos lignes ne sont pas de la même hauteur que votre en-tête. Espérons que cela aide.

function resizeGridHeight(grid, maxRows) {
    // this method will resize a grid's height based on the number of elements in the grid
    // example method call: resizeGridHeight($("#XYZ"), 5)
    // where XYZ is the id of the grid's table element
    // DISCLAIMER: this method is not heavily tested, YMMV

    // gview_XYZ is a div that contains the header and body divs
    var gviewSelector = '#gview_' + grid.attr('id');
    var headerSelector = gviewSelector + ' .ui-jqgrid-hdiv';
    var bodySelector = gviewSelector + ' .ui-jqgrid-bdiv';

    // use the header's height as a base for calculating the max height of the body
    var headerHeight = parseInt($(headerSelector).css('height'));
    var maxHeight = maxRows * headerHeight;

    // grid.css('height') is updated by jqGrid whenever rows are added to the grid
    var gridHeight = parseInt(grid.css('height'));
    var height = Math.min(gridHeight, maxHeight);
    $(bodySelector).css('height', height);
}
1
répondu Walter Stabosz 2011-09-19 15:40:11

Ajouter le code ci-dessous à l'intérieur de la fonction loadComplete

var ids = grid.jqGrid('getDataIDs');
//setting height for grid to display 15 rows at a time
if (ids.length > 15) {
    var rowHeight = $("#"+gridId +" tr").eq(1).height();
    $("#"+gridId).jqGrid('setGridHeight', rowHeight * 15 , true);
} else {
//if rows are less than 15 then setting height to 100%
    $("#"+gridId).jqGrid('setGridHeight', "100%", true);
}
0
répondu anand kumar 2013-06-17 23:47:19