Votre problème peut être très facilement résolus avec le respect de l' postData
paramètre y compris les fonctions et trigger('reloadGrid')
. J'essaie d'expliquer l'idée plus détaillée.
Nous utilisons mtype: "GET"
. La seule chose à quelle norme de recherche/filtre de la boîte de le faire après l'affichage de l'interface est d'ajouter des paramètres supplémentaires pour l'url, envoyer à un serveur et le rechargement de la grille de données. Si vous avez votre propre interface pour la recherche/filtrage (certains contrôles ou des cases à cocher, par exemple), vous devez juste ajouter votre url vous-même et de recharger la grille à l'égard de l' trigger('reloadGrid')
. Pour la réinitialisation de l'information dans la grille, vous pouvez choisir n'importe quelle manière que vous préférez. Par exemple, vous pouvez inclure dans les commandes select qui vous avez une option comme "pas de filtrage".
Pour être plus précis de votre code devrait ressembler à la code de la réponse comment le recharger jqgrid dans asp.net mvc quand je change de dropdownlist:
var myGrid = jQuery("#list").jqGrid({
url: gridDataUrl,
postData: {
StateId: function() { return jQuery("#StateId option:selected").val(); },
CityId: function() { return jQuery("#CityId option:selected").val(); },
hospname: function() { return jQuery("#HospitalName").val(); }
}
// ...
});
//
var myReload = function() {
myGrid.trigger('reloadGrid');
};
var keyupHandler = function (e,refreshFunction,obj) {
var keyCode = e.keyCode || e.which;
if (keyCode === 33 /*page up*/|| keyCode === 34 /*page down*/||
keyCode === 35 /*end*/|| keyCode === 36 /*home*/||
keyCode === 38 /*up arrow*/|| keyCode === 40 /*down arrow*/) {
if (typeof refreshFunction === "function") {
refreshFunction(obj);
}
}
};
// ...
$("#StateId").change(myReload).keyup(function (e) {
keyupHandler(e,myReload,this);
});
$("#CityId").change(myReload).keyup(function (e) {
keyupHandler(e,myReload,this);
});
Si l'utilisateur de changer l'option sélectionnée dans la boîte de sélection avec des id=StateId
ou d'une autre boîte de sélection avec des id=CityId
(avec la souris ou le clavier), la fonction myReload
sera appelé, qui vient de forcer le rechargement de données dans jqGrid. Pendant correspondante $.ajax
la demande, qui jqGrid faire pour nous, la valeur de postData
paramètre sera transmis $.ajax
comme data
paramètre. Si certains de propriétés de l' data
sont des fonctions, ces fonctions seront appelées par $.ajax
. Si les données réelles à partir des listes de sélection sera chargé et toutes les données seront ajoutées aux données envoyées au serveur. Vous avez seulement besoin de mettre en œuvre la lecture de ces paramètres dans votre partie du serveur.
Ainsi, les données de l' postData
paramètre sera ajouté à l'url (symbole '?' et '&' sera ajouté automatiquement et tous les symboles spéciaux comme les blancs seront également codée comme d'habitude). Les avantages de l'utilisation de l' postData
est:
-
utilisation de fonctions à l'intérieur d'
postData
paramètre permet de charger les réelles valeurs de tous utilisé des contrôles au moment de rechargement;
- Votre code séjour très clair de la structure.
- Tous fonctionne bien, non seulement avec les requêtes HTTP GET, mais avec HTTP POST aussi;
Si vous utilisez un "pas de filtrage" ou "tous" les entrées dans la zone de sélection d' StateId
, vous pouvez modifier la fonction qui calcule la valeur de StateId
paramètre qui doit ajouté à l'url du serveur de
StateId: function() { return jQuery("#StateId option:selected").val(); }
à quelque chose comme suit:
StateId: function() {
var val = jQuery("#StateId option:selected").val();
return val === "all"? "": val;
}
Du côté serveur, vous devriez ne fait pas de filtrage pour StateId
si vous recevez une valeur vide comme un paramètre.
Optionnellement, vous pouvez utiliser myGrid.setCaption('A text');
de variation d'une grille de titre. Cela permet à l'utilisateur de voir plus clair, que les données dans la grille sont filtrées avec certains critères.