2010-09-22 5 views
11

Nous utilisons le bouton de rechargement du navigateur jqGrid sur une grille avec loadonce défini sur true.Comment obtenir jqGrid recharger pour aller au serveur?

Le bouton de rechargement ne retourne PAS actuellement sur le serveur pour obtenir les données - comment pouvons-nous obtenir le rechargement pour aller au serveur pour obtenir les dernières données?

je crois que nous pouvons utiliser le rappel beforeRefresh pour définir la grille data à json au lieu de local mais je ne suis pas clair comment configurer même la méthode beforeRefresh - Je ne comprends pas vraiment la documentation.

Répondre

22

Vous n'êtes pas la seule personne qui a le problème. J'ai répondu à the same question avant. Pour recharger le contenu de la grille à partir du serveur, vous devez réinitialiser le paramètre datatype à la valeur d'origine "json" ou "xml", puis actualiser la grille. Par exemple

jQuery("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 

MISE À JOUR: Pour appeler la ligne à l'intérieur du beforeRefresh gestionnaire d'événements, vous pouvez faire suivant

jQuery("#list").jqGrid('navGrid','#pager', 
    { edit:false,view:false,add:false,del:false,search:false, 
    beforeRefresh: function(){ 
     alert('In beforeRefresh'); 
     grid.jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 
    } 
    }); 

J'ai modifié un exemple de vieille question h. Here si vous cliquez sur le bouton d'actualisation, vous pouvez voir en direct comment le code fonctionne.

MISE À JOUR 2: Free jqGrid prend en charge de nouvelles options. reloadGrid événement prend en charge fromServer: true paramètre qui peut être utilisé pour forcer le rechargement des données du serveur et navGrid prend en charge l'option reloadGridOptions qui peut être utilisé pour spécifier les options de reloadGrid utilisé en cliquant sur le bouton Actualiser. Ainsi, le code ci-dessus pourrait être

$("#list").jqGrid("navGrid", { 
    edit: false, 
    add: false, 
    del: false, 
    search: false, 
    reloadGridOptions: { fromServer: true } 
}); 

Par ailleurs, on peut utiliser l'option navOptions de jqGrid pour spécifier les options par défaut de navGrid (voir l'article wiki). Il permet d'écrire le code quelque chose comme

$("#link").jqGrid({ 
    // all typical jqGrid parameters 
    datatype: "json", // or "xml" 
    loadonce: true, 
    pager: true, // no empty div for page is required 
    navOptions: { 
     edit: false, 
     add: false, 
     del: false, 
     search: false, 
     reloadGridOptions: { fromServer: true } 
    } 
}).jqGrid("navGrid"); 
+0

Merci - Comment pouvez-vous exécuter ce code lorsque vous cliquez sur le bouton de rechargement? Je ne comprends pas comment configurer la barre de navigation pour exécuter la méthode 'beforeRefresh' si c'est ce à quoi vous faites allusion. –

+0

@Marcus: Si c'est très facile. Je inclut le code correspondant dans ma réponse. – Oleg

+0

@Oleg, j'ai essayé de le faire, mais une fois que je clique sur le bouton d'actualisation, la pagination ne fonctionne pas. –

2

J'ai essayé la configuration suivante et cela fonctionne.

<script type="text/javascript"> 
jQuery(function() { 
    jq("#YOUR-GRID-ID").jqGrid({ 
     ... 
     loadonce: true, 
     ... 
    }); 
    jQuery("#refresh_YOUR-GRID-ID").click(function(){ 
     jQuery("#YOUR-GRID-ID").setGridParam({datatype: 'json'}); 
     jQuery("#YOUR-GRID-ID").trigger("reloadGrid"); 
    }); 
}); 
</script> 
Questions connexes