2010-10-21 12 views
4

Actuellement, j'ai une grille configurée avec la recherche activée. Lorsque je lance une recherche, tout fonctionne correctement et je peux renvoyer de bonnes données à la grille. Je vois que le paramètre "_search" sur l'URL est défini sur "true" et tout va bien.jqGrid effacer les critères de recherche

Cependant, lorsque la recherche est terminée et que les données ne sont plus pertinentes, je voudrais recharger la grille pour afficher les données précédentes qui s'y trouvaient (les données affichées sur le pageload initial). J'ai fait une fonction pour appeler la méthode "trigger (" reloadGrid ")", mais cela envoie juste les mêmes données avec le "_search" encore réglé sur "true".

Existe-t-il un moyen de vider les données de la requête de recherche et de simplement recharger les données initiales affichées sur pageload ou au moins de redéfinir la valeur "_search" sur "false" pour pouvoir la vérifier? Actuellement, le seul moyen d'afficher les données d'origine est de recharger la page.

+0

La réponse dépend de la nature de ce type de recherche que vous avez mis en œuvre. Recherche de barre d'outils, recherche unique, recherche avancée? – Gregg

Répondre

15

Si vous utilisez la recherche jqGrid les deux choses suivantes seront mis

  1. paramètre search de jqGrid sera réglé sur true.
  2. postData Le paramètre de jqGrid sera modifié. La valeur du paramètre postData est un objet qui possède certaines propriétés. Dans le cas de single searching, les propriétés searchField, searchString et searchOper seront définies. Dans le cas de advanced searching, seule la propriété filters du paramètre postData sera définie. (La propriété _search sera également réglé, mais d'un autre composant de jqGrid, donc il est important pour la remise à zéro de la recherche.)

Donc, pour réinitialiser la recherche, vous pouvez définir le gestionnaire d'événements suivant pour votre « Reset Recherche "bouton:

$("#resetSearch").click(function() { 
    var grid = $("#list"); 
    grid.jqGrid('setGridParam',{search:false}); 

    var postData = grid.jqGrid('getGridParam','postData'); 
    $.extend(postData,{filters:""}); 
    // for singe search you should replace the line with 
    // $.extend(postData,{searchField:"",searchString:"",searchOper:""}); 

    grid.trigger("reloadGrid",[{page:1}]); 
}); 

Vous pouvez voir tout ce live à the following demo. Dans la démo, vous devez d'abord cliquer sur le bouton "Rechercher" de la barre de navigation et définir un filtre de recherche. Ensuite, vous pouvez cliquer sur le bouton "Réinitialiser la recherche" et le réinitialiser.

+0

Merci pour la bonne réponse. Est-ce que cela fonctionnerait aussi si j'ai la grille définie pour travailler à partir des données GET et non POST? J'ai essayé juste de remplacer l'URL par une nouvelle pour les données GET mais je trouve qu'il envoie juste les paramètres deux fois. – ackerchez

+0

@ackerchez: Oui cela fonctionne à la fois pour HTTP POST et GET. C'est l'avantage de 'postData'. Dans le cas de GET, tous les paramètres de 'postData' seront ajoutés à' url'. Si la valeur actuelle de 'url' contient'? ', Alors les paramètres seront ajoutés en commençant par'? '. Si ce n'est pas le cas, alors il sera ajouté à partir de '&'. Tout est donc très simple et stable. – Oleg

+0

OMG! Oleg avez-vous vous-même implémenté jqgrid ?? Vous avez trouvé sur tous les messages! Merci une fois de plus. – Paschalis

2

Pour nettoyer les fenêtres de filtre (texte et sélectionnez) avaient un ajout suivant (fonction entière):

function filtReset() { 

    $("#list").jqGrid('setGridParam',{search:false}); 

    var postData = $("#list").jqGrid('getGridParam','postData'); 

    $.extend(postData, { filters: "" }); 

    for (k in postData) { 
     if (k == "_search") 
      postData._search = false; 
     else if ($.inArray(k, ["nd", "sidx", "rows", "sord", "page", "filters"]) < 0) { 
      try { 
       delete postData[k]; 
      } catch (e) { } 

      $("#gs_" + $.jgrid.jqID(k), $("#list").get(0).grid.hDiv).val(""); 

     } 
    } 
    $("#list").trigger("reloadGrid", [{ page: 1}]); 
    // for singe search you should replace the line with 
    // $.extend(postData,{searchField:"",searchString:"",searchOper:""}); 
}