web-dev-qa-db-fra.com

jqGrid Actualisation des données locales (objet JSON)

J'essaie d'utiliser jqGrid avec des données locales et je trouve quelques problèmes:

J'initialise la chose comme ceci:

function refreshGrid($grid, results)
{
    $grid.jqGrid({
  data: results,
        datatype: "local",
        colNames:['#','File', 'Category', 'Line Number', 'Message Text','Detailed'],
        colModel:[
            {name:'count',index:'count', width:100, resizable: true},
            {name:'basename',index:'basename', width:100, resizable: true, classes:['basename']},
            {name:'category',index:'category', width:60, resizable: true},
            {name:'linenumber',index:'linenumber', width:60, resizable: true},
            {name:'text',index:'text',width:400, resizable: true},
            {name:'detailed',index:'detailed',width:100,classes:['detailed'], resizable: true }
            ],
        viewrecords: true,
     rowNum:100,
     rowList:[100,200],
     pager: '#debug_errors_pager',
     caption:"JSON Example"
 });
}

Les données que je transmets, results, sont un tableau d'objets.

Problèmes:

1) Le téléavertisseur est totalement éteint. Il indique le nombre correct, mais ne me permet pas de feuilleter les données.

2) Je ne peux pas actualiser les données. J'utilise ma propre fonction de recherche pour arriver à ma results. Je n'arrive pas à comprendre comment mettre à jour les données existantes. La grille s'initialise pour la première fois. Lors des tentatives suivantes, il s'initialise sur une table vide.

3) J'ai essayé des choses comme:

$grid.empty() - Ne fonctionne pas car l'objet $ grid est décoré par jqgrid. J'essaie de "supprimer" l'ancienne grille et de la restituer sous forme de solution de contournement .. `$ Grid.trigger ('reloadGrid') - Ne fonctionne pas, je ne sais pas pourquoi.

Note: cela utilise jQGrid 3.7.

23
Koobz

Vous pouvez utiliser simple:

jQuery("#list")
    .jqGrid('setGridParam',
        { 
            datatype: 'local',
            data:mydata
        })
    .trigger("reloadGrid");
31
Ved

J'ai pu réaliser quelque chose de similaire. L'astuce pour mon problème consistait à effacer les données avant de mettre à jour le paramètre de grille de données. En supposant que votre grille soit initialisée ailleurs (avec le type de données: 'local'), essayez:

function refreshGrid($grid, results) {
    $grid.jqGrid('clearGridData')
        .jqGrid('setGridParam', { data: results })
        .trigger('reloadGrid', [{ page: 1}]);
}
22
Megan

question 1:

Si nous avons défini un pager pour la grille avec les données côté client, les boutons du pageur sont automatiquement désactivés. En d'autres termes, la version actuelle de grid fait ne prend pas en charge la pagination et la recherche côté client.

données locales

Question 2: Avez-vous essayé: 

 $("#list").GridUnload();

voir ici pour connaître les différences entre gridUnload() et trigger('reloadGrid').

7
bruno

Je n'ai pas trouvé de moyen documenté de mettre à jour les données locales de jqGrid.

$.extend($.fn.jqGrid, { setData: function(data) {
    this[0].p.data = data;
    return true;
} } );

Après cela, vous pouvez procéder comme suit pour mettre à jour jqGrid avec de nouvelles données:

supposons que votre grille a été déclarée comme ceci:

    jQuery("#list").jqGrid({ datatype: "local", ... other params ... });

alors vous pouvez faire:

jQuery("#list").jqGrid('setData', array_with_new_data);
jQuery("#list").trigger("reloadGrid");

P.S. voir le lien sur comment récupérer toutes les données de la grille Récupérer le contenu de la grille

6
WayFarer

Suivre fonctionne pour moi lors de l'actualisation de données sur une grille existante:

var gridData = [...];

var grid = jQuery('#gridId');
grid.jqGrid('clearGridData');
if( grid.get(0).p.treeGrid ) {
    grid.get(0).addJSONData({
        total: 1,
        page: 1,
        records: gridData.length,
        rows: gridData
    });
}
else {
    grid.jqGrid('setGridParam', {
        datatype: 'local',
        data: gridData,
        rowNum: gridData.length
    });
}
grid.trigger('reloadGrid');

Je devais le faire de cette façon parce que reloadGrid () appelle populate (), populate () appelle addLocalData () et transmet la valeur renvoyée à addJSONData (), mais pour treeGrid == true, addLocalData () ne renvoie rien et addJSONData () par la suite ne fait rien.

5
zishan

Si vous utilisez des données locales, vous devez mentionner vos données locales json dans jqGrid 's setGridParampropriété

 jQuery("#list")
        .jqGrid('setGridParam', {
        datatype: 'local',
        data:results //json object
    });

Pour recharger la jqgrid, vous pouvez utiliser ce qui suit.

 jQuery("#list").trigger("reloadGrid");
0
Dulith De Costa