web-dev-qa-db-fra.com

Comment afficher toutes les lignes dans jqGrid?

jqGrid expose une propriété rowNum dans laquelle vous pouvez définir le nombre de lignes à afficher pour chaque page. Comment définissez-vous la grille pour afficher uniquement TOUTES les lignes?

Pour le moment, je mets juste la rowNum sur quelque chose de très haut comme <%= int.MaxValue %> mais je me demande s’il existe une meilleure façon de le faire.

47
Jon Erickson

Dans la dernière version de jqGrid, vous pouvez définir rowNum sur -1 pour indiquer à la grille de toujours afficher toutes les lignes:

rowNum: -1

Voir la dernière documentation jqGrid ici

Plus précisément:

Définit le nombre d'enregistrements que nous voulons afficher dans la grille. Ce paramètre est transmis à l'URL pour que la routine du serveur récupère les données. Notez que si vous définissez ce paramètre sur 10 (c’est-à-dire que vous récupérez 10 enregistrements) et que votre serveur en renvoie 15, seuls 10 enregistrements seront chargés. Définissez ce paramètre sur -1 (illimité) pour désactiver cette vérification . </ strike>


Mettre à jour

Malheureusement, ce comportement a été cassé dans jqGrid 3.6.3. Selon ce message de Tony :

Oui c'est vrai. La raison en est le nouveau parchemin introduit: 1. Dans le futur, nous corrigerons ce comportement.

Les développeurs de jqGrid sont donc conscients de ce problème et envisagent apparemment de le résoudre dans une version ultérieure. Malheureusement, cette publication date de plus d'un an ...

Pour le moment, tout ce que je peux vous recommander, c’est de définir rowNum sur un très grand nombre afin de simuler le comportement de -1.


Vous pouvez également essayer la solution whatispunk ci-dessous consistant à utiliser rowNum: ''. Cependant, j'ai essayé ceci sur une grille contenant des données locales (loadonce: true). En essayant de trier les lignes, toutes les données locales de la grille disparaissent. Donc, cette solution ne semble pas fonctionner pour les grilles avec des données locales, à moins que ce défaut n'ait été corrigé dans une version ultérieure de jqGrid (je l'ai testé sur jqGrid 3.8.2). Si vous avez des commentaires, s'il vous plaît poster un commentaire ci-dessous!


Mise à jour - 16 avril 2014

Selon l'équipe de jqGrid ceci est maintenant corrigé:

J'ai ajouté le support pour définir différentes valeurs d'affichage sur la boîte de sélection du pageur, y compris -1 pour tous.

Je n'ai pas eu l'occasion de tester pour confirmer le correctif, cependant. Vraisemblablement, ce changement sera dans la prochaine version après jqGrid 4.6.0.

53
Justin Ethier

jqgrid (3.5 quand même) ne semble pas avoir une manière élégante de le faire. Le mieux que j'ai trouvé jusqu'à présent est d'ajouter quelque chose de similaire aux options suivantes de votre grille:

rowList:[10,20,30,100000000],
loadComplete: function() {
    $("option[value=100000000]").text('All');
},

Où 100000000 est un nombre arbitrairement supérieur au nombre maximal de lignes que vous retournerez un jour et où la ligne option [value =] est affichée de manière à rendre votre interface utilisateur un peu plus agréable. Jenky, mais travaille pour moi.

8
C Dolan

si vous ne souhaitez pas utiliser la pagination, changez le code côté serveur pour renvoyer simplement toutes les lignes. ne pas utiliser le paramètre de lignes du tout.

si vous voulez avoir la liste des lignes, mais aussi une option pour tout afficher, alors faites quelque chose comme ceci dans les propriétés de la grille

jQuery("#statement_mods").jqGrid({
  rowList:['ALL',30,50,100,200]
});

puis dans le code côté serveur, assurez-vous d'ignorer le paramètre rows si GET ['rows'] = 'ALL'

4
Yashvit

Cela marche:

// Step1 - defines the rows
jqGridOptions.rowList =[10, 50, 100, 500, 'All'];
...
...
// Step2 - Change the 'All' to a meaningful value 
loadComplete: function (data) {
   $(".ui-pg-selbox option[value='All']").val(1000);
}
3
Aneesh Vijendran

régler rowNum:-1 a fait l'affaire pour moi

2
Salty

Si vous avez défini la pagination dans la barre de navigation, vous pouvez également accéder au nombre total de lignes écrites dans le coin inférieur droit de la grille, puis les ajouter à l’option RowList générée.

Faites quelque chose comme:

    // Get the total number of rows and delete space between numbers (Split the content of the div depending of the language (for me french)

var val=jQuery("#pager_right div").text().split('sur')[jQuery("#pager_right div").text().split('sur').length-1].split(' ').join('');

    // And do the appending if the option isn't already added

if(!$(".ui-pg-selbox option[value='"+val+"']").length > 0)
    jQuery(".ui-pg-selbox").append($('<option></option>').val(val).html(val));
2
JULIEN

J'ai ce travail:

$('#bla').jqGrid({
        ...
        'rowNum'      : 0,
        'loadOnce'    : true,
        'loadComplete': function(data) {
            $(this).jqGrid('setGridParam', 'rowNum', data.total);
        },
        ...
});

Cela fonctionne avec et sans l'option loadOnce définie sur true. Notez que vous devez d'abord définir l'option rowNum sur 0. Si vous laissez cette option de côté, les 20 enregistrements à afficher restent toujours par défaut. dans le format de lecteur JSON documenté.

1
lotjuh
Jqgrid.PagerSettings.PageSize = Max Row you want to display;
Jqgrid.ToolBarSettings.ToolBarPosition = ToolBarPosition.Hidden;
1
Ankur

résolu avec un changement simple: rowNum: inputDataArray.length

où inputDataArray est le tableau que je fournis à la grille.

1
Nilesh Shukla

Vous pouvez également accéder à jquery.jqGrid.js et remplacer "rowNum: 20" par "rowNum: Some-Really-Large-Number". Lorsque vous définissez votre jqGrid, ne spécifiez pas rowNum. Puis, renvoyez l'intégralité de votre ensemble de données à jqGrid.

0
Ron
loadComplete: function (data) {
                //set our "ALL" select option to the actual number of found records
                $(".ui-pg-selbox option[value='ALL']").val(data.records);
}

Cela modifie l'option "ALL" par le nombre réel d'enregistrements dans l'ensemble de données.

0
Chris

Même s'il apparaît toujours dans le document que vous ne pouvez pas définir rowNum sur -1 à partir de jqGrid 4.5.4, cela fonctionnera à nouveau (peut-être dans une version antérieure également).

0
DevAntoine

Par défaut, la grille JQ affiche 20 lignes maximum si vous n'utilisez pas la pagination:

// To over come with this problem ,you can just write the bold    mark
   (rowNum:10000,):
   $("#MasterDataDefinationGrid").jqGrid({
            url: 'FetchData.aspx/GetDataFromDB',
            datatype: 'json',
            mtype: 'POST',
            height: 300,
            autowidth: true,
            serializeGridData: function (postData) {
                return JSON.stringify(postData);
            },
            ajaxGridOptions: { contentType: "application/json" },
            loadonce: true,
            colNames: [Your column names],
            colModel: [Your model],
            formatter: 'actions',
            pager: '#MasterDataDefinationPager', pgbuttons: false,pgtext:false,
            multiselect: false,
            ignoreCase: true,
            **rowNum: 10000,**
            loadtext: 'Loading ...',
            gridview: true,
            hidegrid: false,
            jsonReader: {
                page: function (obj) { return 1; },
                total: function (obj) { return 1; },
                records: function (obj) { return obj.d.length; },
                root: function (obj) { return obj.d; },
                repeatitems: false,
                id: "0"
            },
            caption: 'Data'
        });
0
VCody

Réglage de rowNum: '' vous obtenez toutes les lignes.

0
mikesigs