Est-il possible de redimensionner 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.
En guise de suivi:
Le code précédent présenté dans cet article a finalement été abandonné car il n’était pas fiable. J'utilise maintenant la fonction API suivante pour redimensionner la grille, comme recommandé par la documentation de jqGrid:
jQuery("#targetGrid").setGridWidth(width);
Pour effectuer le redimensionnement réel, une fonction mettant en oeuvre la logique suivante est liée à l'événement de redimensionnement de la fenêtre:
Calculez la largeur de la grille en utilisant clientWidth de son parent et (si ce n'est pas disponible) son attribut offsetWidth.
Effectuez une vérification de cohérence pour vous assurer que la largeur a changé de plus de x pixels (pour résoudre certains problèmes spécifiques à l'application).
Enfin, utilisez setGridWidth () pour changer 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');
Et exemple de balisage:
<div id="grid_container">
<table id="grid"></table>
<div id="grid_pgr"></div>
</div>
J'utilise cela en production depuis quelque temps maintenant sans aucune plainte (il est possible que quelques ajustements soient nécessaires pour regarder directement 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');
Redimensionnement automatique:
Pour 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);
});
}
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 et 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 ...
En empruntant le code sur 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 vous liez directement à l'événement window.onresize, qui ressemble en réalité à ce que vous souhaitez de votre question.
Si votre grille est définie sur 100% width, elle devrait automatiquement se développer lorsque son conteneur se développera, à moins que le plug-in que vous utilisez ne subisse certaines subtilités que je ne connais pas.
Si vous:
shrinkToFit: false
_ (colonnes de largeur fixe moyenne)autowidth: true
Vous pouvez créer une grille avec une largeur fluide avec les styles suivants:
.ui-jqgrid {
max-width: 100% !important;
width: auto !important;
}
.ui-jqgrid-view,
.ui-jqgrid-hdiv,
.ui-jqgrid-bdiv {
width: auto !important;
}
La réponse principale a fonctionné pour moi mais a rendu l’application extrêmement insensible dans IE, alors j’ai utilisé une minuterie comme suggéré. Le code ressemble à quelque chose comme ceci ($(#contentColumn)
est le div dans lequel JQGrid est assis):
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 voté en faveur d'un couple, mais aucune d'entre elles n'a fonctionné pour moi sur IE 8 pour une raison étrange ... J'ai toutefois rencontré ces liens .. Ce mec a écrit une bibliothèque qui semble fonctionner. Incluez-la dans vos projets en plus de l'interface utilisateur, indiquez le nom de votre table et de la div.
http://stevenharman.net/blog/archive/2009/08/21/creating-a-fluid-jquery-jqgrid.aspx
Cela marche..
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?
});
autowidth: true
a parfaitement fonctionné pour moi. appris de ici .
<script>
$(document).ready(function(){
$(window).on('resize', function() {
jQuery("#grid").setGridWidth($('#fill').width(), false);
jQuery("#grid").setGridHeight($('#fill').height(),true);
}).trigger('resize');
});
</script>