2011-09-12 3 views
2

Mes données sont chargées correctement sur ma page. Cependant, j'ai 2 zones de texte et un bouton de soumission sur lequel je veux filtrer les enregistrements du serveur.Comment puis-je utiliser jqGrid avec textbox pour rechercher?

Remarque: Je n'utilise pas la fonctionnalité de filtres existante disponible avec jqgrid par défaut.

Je suis un peu confus comment puis-je y parvenir. Existe-t-il une fonctionnalité intégrée de jqgrid pour y parvenir? La façon dont j'occupe actuellement c'est je gère l'événement click dans mon javascript et les données post d'alimentation à la méthode d'action:

$('#submit').click(function() { 

      $("#customers").jqGrid('setGridParam', { postData: { 'ContactName': $('#contactName').val(), 
       CompanyName: $('#companyName').val() 
      } 
      }); 

      $("#customers").trigger("reloadGrid"); 

     }); 

Ces données de poste est ensuite capturé sur la méthode d'action et il fonctionne très bien. Y a-t-il une meilleure façon de faire cela? ou suis-je sur la bonne voie? Parfois, je sens que j'écris moins de code sur le serveur et sont devenus plus d'un programmeur côté client depuis que je commencé à utiliser Asp.Net MVC 3.0;)

+1

J'adorerais voir une réponse à cela. J'ai fini par faire une action assez similaire dans ma mise en œuvre. La seule chose que j'ai faite qui pourrait être utile est d'envelopper la construction de la grille et la mise à jour du filtre dans un plugin jquery personnalisé. Ce qui me permet d'appeler simplement jqGrid_custom ("updateFilter", "newfilter"); Un peu de travail supplémentaire mais cela me permet d'utiliser la même solution sur toutes mes grilles. –

+0

bonne question ... @Anthony –

+0

Merci Frank! – TCM

Répondre

3

Vous ne devez pas utiliser setGridParam changer postData comme vous pouvez déclarer une fonction:

jqGrid({ 
    url : ..., 
    datatype : ..., 
    mtype : "POST", 
    postData : { 
      "ContactName" : (function() { 
          return $("#contactName").val(); 
         }) 
    } 
} 

afin que votre fonction d'envoi n'appel à reloadGrid

$('#submit').click(function() { 
    $("#customers").trigger("reloadGrid"); 
} 

Si vous voulez réduire la quantité de code, un Vous devriez créer une API simple dans JS pour sélectionner des entités comme Client, Personne, Contact, etc. Actuellement, j'ai une application dont les formulaires se composent de dizaines d'entités - j'ai donc dû créer une API JS pour la sélection (cela donne aussi regarde et ressent). Du côté client, le client spécifie le nom de la liste à obtenir, tandis que la liste des noms possibles est définie dans le fichier de configuration du serveur, qui définit également la requête vers l'ORM et l'affichage des champs (j'utilise un langage d'expression des champs d'entité aux chaînes).

+2

Merci, vous économisez mon temps en écrivant la réponse avec des informations proches. Je recommande @Anthony de lire [la réponse] (http://stackoverflow.com/questions/2928371/how-to-filter-the-jqgrid-data-not-using-the-built-in-search-filter-box/2928819 # 2928819), qui décrit exactement la situation qu'il a. – Oleg

+0

@Oleg: Êtes-vous le développeur de jqgrid? Comment en savez-vous autant sur jqgrid? Vous allez beaucoup plus loin que ce que l'OP vous demande normalement et couvrez tous les scénarios possibles. – TCM

+0

@Oleg: Je suis juste curieux (pas calme lié à la question) mais pourquoi vois-je que Boris Treukhov a posté sa réponse il y a 6 heures et que vous avez posté un commentaire sur cette réponse il y a 7 heures sur le point d'écrire après 1 heure? – TCM

Questions connexes