Su problema puede ser resuelto muy fácilmente con respecto al parámetro postData
incluyendo funciones y trigger('reloadGrid')
. Intento explicar la idea más detallada.
Deje que usemos mtype: "GET"
. Lo único que hace la caja de filtro/búsqueda estándar después de mostrar la interfaz es añadir algunos parámetros adicionales a la url, enviar al servidor y volver a cargar los datos de la grilla. Si tiene su propia interfaz para buscar/filtrar (algunos controles de selección o casillas de verificación, por ejemplo), debe adjuntar su url usted mismo y volver a cargar la grilla con respecto al trigger('reloadGrid')
. Para restablecer la información en la grilla, puede elegir la forma que prefiera. Por ejemplo, puede incluir en los controles de selección que tiene una opción como "no filtrar".
Para ser más exactos el código debería parecerse el código de la respuesta 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);
});
Si la opción en el cuadro de selección de cambio de usuario seleccionado con id=StateId
u otra caja de selección con id=CityId
(con el ratón o el teclado), se llamará a la función myReload
, que solo fuerza la recarga de datos en jqGrid. Durante la solicitud correspondiente $.ajax
, que jqGrid hace por nosotros, el valor del parámetro postData
se reenviará a $.ajax
como parámetro data
. Si algunas de las propiedades de data
son funciones, se llamará a esta función por $.ajax
. Por lo tanto, los datos reales de los cuadros de selección se cargarán y todos los datos se agregarán a los datos enviados al servidor. Solo necesita implementar la lectura de estos parámetros en su parte del servidor.
Así los datos de parámetro postData
se añadirán a la dirección URL (símbolos '?' Y '&' será añadido automáticamente y todos los símbolos especiales como espacios en blanco serán también codificados como de costumbre). Las ventajas del uso de postData
es:
- uso de funciones dentro
postData
parámetro le permite cargar valores reales de todos los controles utilizados en el momento de la recarga;
- Tu código de permanencia tiene una estructura muy clara.
- Todo funciona bien, no solo con las solicitudes HTTP GET, sino también con HTTP POST;
Si utiliza algún "sin filtro" o "todas" las entradas en el cuadro de selección StateId
, puede modificar la función que calcular el valor de StateId
parámetro que debe añade a la URL del servidor de
StateId: function() { return jQuery("#StateId option:selected").val(); }
a algo como lo siguiente:
StateId: function() {
var val = jQuery("#StateId option:selected").val();
return val === "all"? "": val;
}
en el lado del servidor que debiera hace ninguna filtración para StateId
si recibe un valor vacío como un parámetro.
Opcionalmente puede usar myGrid.setCaption('A text');
para cambiar un título de la grilla. Esto permite al usuario ver más claro, que los datos en la cuadrícula se filtran con algunos criterios.
Revisa this link (comprobar este enlace) http://stackoverflow.com/questions/17179777/search-with-autocomplete-in-codeigniter-and-jqgrid/17195094#17195094 –