Wydaje mi się, że nie jesteś pierwszą osobą, która zadaje to samo pytanie. Ostatnio poprosiłem o the close question (przeczytaj wiele komentarzy do odpowiedzi). Kolejne old answer, w tym the demo, może prawdopodobnie odpowiedzieć na niektóre z otwartych pytań.
Twój kod za pomocą beforeRequest
nie działają tylko dlatego, że funkcja beforeRequest
będą caled bezpośrednio przed wywołania AJAX oraz zmiana parametru search
jest zbyt późno. Co więcej, prawdopodobnie nie jest najlepszym pomysłem przebudzenie z filters
. W przypadku, gdy użytkownik nie będzie mógł ustawić żadnego innego filtra siatki.
Mogę powtórzyć, że rozwiązanie, którego potrzebujesz, jest bardzo proste. Powinieneś ustawić właściwość filters
parametrujqGrid na filtr, który potrzebujesz i dodatkowo ustawić inny parametr jqGrid search:true
. To wszystko! Później użytkownik będzie mógł otworzyć okno wyszukiwania z wyprzedzeniem i zastąpić filtry. Użytkownik może również kliknąć przycisk "Resetuj" w oknie wyszukiwania zaawansowanego i ustawić filters
na pusty ciąg znaków i search:false
.
Dla lepszego zrozumienia muszę wyjaśnić, w jaki sposób parametr search
lub inny jqGrid będzie używany w adresie URL. Istnieje parametr prmNames jqGrid, który definiuje nazwy parametrów wysyłane jako część adresu URL lub jako część danych POSTedowanych na serwer. Domyślna wartość prmNames zawierać search:"_search"
a kod wewnętrznego populate funkcji używanych przez jqGrid ma następujący kod uproszczony fragment:
var prm = {}, pN=ts.p.prmNames;
if(pN.search !== null) {prm[pN.search] = ts.p.search;}
if(pN.nd !== null) {prm[pN.nd] = new Date().getTime();}
if(pN.rows !== null) {prm[pN.rows]= ts.p.rowNum;}
if(pN.page !== null) {prm[pN.page]= ts.p.page;}
if(pN.sort !== null) {prm[pN.sort]= ts.p.sortname;}
if(pN.order !== null) {prm[pN.order]= ts.p.sortorder;}
...
$.extend(ts.p.postData,prm);
gdzie
prmNames: {page:"page",rows:"rows", sort: "sidx",order: "sord", search:"_search",
nd:"nd", id:"id",oper:"oper",editoper:"edit",addoper:"add",
deloper:"del", subgridid:"id", npage: null, totalrows:"totalrows"}
Tak, aby ustawić _search
parametr URL należy ustawić search
parametr jqGrid.
Spójrz na the following demo. Można łatwo sprawdzić za pomocą Fiddler z Firebug że jqGrid ze strony wysyłania HTTP GET z następującym adresem URL:
http://www.ok-soft-gmbh.com/jqGrid/MultisearchFilterAtStart1.json?filters=%7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22invdate%22%2C%22op%22%3A%22gt%22%2C%22data%22%3A%222007-09-06%22%7D%2C%7B%22field%22%3A%22invdate%22%2C%22op%22%3A%22lt%22%2C%22data%22%3A%222007-10-04%22%7D%2C%7B%22field%22%3A%22name%22%2C%22op%22%3A%22bw%22%2C%22data%22%3A%22test%22%7D%5D%7D&_search=true&nd=1297508504770&rows=10&page=1&sidx=id&sord=asc
Więc to zrobić dokładnie to, czego potrzebują. Kod demo zawiera następujący fragment kodu:
$("#list").jqGrid({
url: 'MultisearchFilterAtStart1.json',
datatype: "json",
postData: {
filters:'{"groupOp":"AND","rules":['+
'{"field":"invdate","op":"gt","data":"2007-09-06"}'+
',{"field":"invdate","op":"lt","data":"2007-10-04"}'+
',{"field":"name","op":"bw","data":"test"}]}'
},
search:true,
// ...
});
Great !! bardzo ostatnio snipped kodu całkowicie rozwiązany nędzę - To - 'jQuery ('#' + block_id) .jqGrid ({ url: loadUrl, mtype: 'POST', postData: {block_id: block_id, filtry: "{" groupOp ":" AND "," rules ": [{" field ":" Cloud Upload ", " op ":" cn "," data ":" costa "}]} '}, szukaj: prawda, autowidth: true, wysokość: '100%', typ danych: "json", // .. }); ' –
[zabrakło czasu na edycję poprzedni komentarz] - gdy kładę moje wyszukiwanie/filter params do argumentów grid-init, całkowicie sprawiło, że wszystko działało. Dziękuję, naprawdę doceniam twoją pomoc! –
@Oleg Ivanov: Nie ma za co! – Oleg