Me parece que no eres la primera persona que hace la misma pregunta. Recientemente pregunté en the close question (lea muchos comentarios a la respuesta). Otro old answer que incluye the demo probablemente podría responder algunas de sus preguntas abiertas.
el código utilizando beforeRequest
no trabajan sólo porque la función beforeRequest
se caled inmediatamente antes de la llamada AJAX y el cambio del parámetro search
es demasiado tarde . Además, el overwiting de filters
cada vez probablemente no sea la mejor idea. En el caso, el usuario no podrá configurar ningún otro filtro de cuadrícula.
Por lo tanto, puedo repetir que la implementación de la solución que necesita es muy simple. Solo debe establecer la propiedad filters
del parámetro postData
de jqGrid en el filtro que necesita y establecer otro parámetro jqGrid search:true
adicionalmente. ¡Es todo! Más tarde, el usuario podrá abrir el cuadro de diálogo de búsqueda avanzada y sobrescribir los filtros. El usuario también puede hacer clic en el botón "Restablecer" del cuadro de diálogo de búsqueda avanzada y establecer filters
en una cadena vacía y search:false
.
Para una mejor comprensión, tengo que aclarar cómo se usará el parámetro search
o algún otro jqGrid en la URL. Hay el parámetro prmNames de jqGrid que define los nombres de los parámetros se envían como parte de la URL o como parte de los datos enviados al servidor POST. El valor predeterminado de prmNames contienen search:"_search"
y el código de populate función interno utilizado por jqGrid tiene el siguiente fragmento de código simplificado:
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);
donde
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"}
Así configurar _search
parámetro de URL se debe establecer search
parámetro de jqGrid.
Mire the following demo. Puede fácil verificar usando Fiddler de Firebug que el jqGrid de la página enviar HTTP GET con la siguiente 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
Por lo tanto, hacen exactamente lo que necesita. El código de la demostración contiene el siguiente fragmento de código:
$("#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,
// ...
});
Gran !! el último cortó de código resuelve totalmente la miseria - esto - 'jQuery ('#' + block_id) .jqGrid ({url : LoadURL, mtype: 'post', Postdata: {block_id: block_id, filtros: '{"groupOp": "AND", "rules": [{"field": "Cloud Upload", "op": "cn", "data": "costa"}]}}}, búsqueda: verdadera, ANCHO AUTO: true, altura: '100%', tipo de datos: "json", // .. }); ' –
[acabaron de tiempo en la edición del comentario anterior] - cuando pongo mi búsqueda/filtro de params en los argumentos grid-init, lo hizo funcionar totalmente. Gracias, realmente aprecio tu ayuda! –
@Oleg Ivanov: ¡De nada! – Oleg