Twój problem może być bardzo łatwo rozwiązany w odniesieniu do parametru postData
, w tym funkcji i trigger('reloadGrid')
. Próbuję wyjaśnić ten pomysł bardziej szczegółowo.
Użyjmy mtype: "GET"
. Jedyne, co robi standardowe okno wyszukiwania/filtrowania po wyświetleniu interfejsu, to dołączanie dodatkowych parametrów do adresu URL, wysyłanie do serwera i ponowne ładowanie danych siatki. Jeśli masz własny interfejs do wyszukiwania/filtrowania (na przykład wybrane kontrolki lub pola wyboru), powinieneś po prostu dołączyć swój adres URL i przeładować sieć z szacunkiem na trigger('reloadGrid')
. Aby zresetować informacje w siatce, możesz wybrać dowolny sposób. Na przykład możesz dołączyć do wybranych formantów, które mają opcję "bez filtrowania".
Aby być bardziej dokładny kod powinien wygląda kodu z odpowiedzi how to reload jqgrid in asp.net mvc when i change 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);
});
Jeśli zmiana użytkownik wybiera opcję zaznaczania z id=StateId
lub innej wybranej pudełku z id=CityId
(z myszy lub klawiatury), zostanie wywołana funkcja myReload
, która po prostu wymusza przeładowanie danych w jqGrid. Podczas odpowiadające $.ajax
wniosek, który jqGrid dla nas zrobić, to wartość z postData
parametru zostaną przekazane $.ajax
jak data
parametru. Jeśli niektóre z właściwości data
są funkcjami, funkcja ta zostanie wywołana przez $.ajax
. Faktyczne dane z wybranych pól zostaną załadowane, a wszystkie dane zostaną dołączone do danych przesłanych na serwer. Musisz tylko zaimplementować odczyt tych parametrów w swojej części serwerowej.
Dane z parametru postData
zostaną dodane do adresu URL (symbole "?" I "&" zostaną dodane automatycznie, a wszystkie specjalne symbole, takie jak puste miejsca, zostaną również zakodowane w zwykły sposób). Zalety wykorzystania postData
jest:
- korzystanie z funkcji wewnątrz
postData
parametr pozwala załadować wartości rzeczywiste ze wszystkich stosowanych kontroli do momentu przeładowania;
- Twój kod pozostaje bardzo przejrzysty.
- Wszystko działa dobrze nie tylko z żądaniami HTTP GET, ale również z protokołem HTTP POST;
przypadku korzystania niektóre w polu wyboru StateId
„bez filtrowania” lub „ALL” wpisy, można zmodyfikować funkcję, która obliczy wartość StateId
parametrem, który powinien dołączany do adresu URL serwera z
StateId: function() { return jQuery("#StateId option:selected").val(); }
coś jak następuje:
StateId: function() {
var val = jQuery("#StateId option:selected").val();
return val === "all"? "": val;
}
po stronie serwera, które powinny nie ma filtrowania dla StateId
jeśli otrzyma pustą wartość jako parametr.
Opcjonalnie można użyć myGrid.setCaption('A text');
, aby zmienić tytuł siatki. To pozwala użytkownikowi widzieć wyraźniej, że dane w siatce są filtrowane według pewnych kryteriów.
Revisa este enlace (sprawdź ten link) http://stackoverflow.com/questions/17179777/search-with-autocomplete-in-codeigniter-and-jqgrid/17195094#17195094 –