Reglas del filtro JqGrid: ¿podemos filtrar en función de una matriz?

Tengo una matriz desde la cual necesito filtrar JQGrid.

var filter = ["a","b","c","d",...255]; var postData = $('jqGridName').jqGrid('getGridParam', 'postData'); jQuery.extend(postData, { filters: { groupOp: "AND", rules: [ { field: "Types", op: "ne", data: filter[0] }, { field: "Types", op: "ne", data: filter[1] }, { field: "Types", op: "ne", data: filter[2] }, { field: "Types", op: "ne", data: filter[3] }, . . . { field: "Types", op: "ne", data: filter[255] }, ] }, }); 

La cantidad de elementos en la matriz no es fija. Pero el máximo que puede contener es 255. ¿Debo escribir hasta 255 (como se indica arriba) o hay alguna manera simple de lograr lo mismo?

Saludos,

Varun R

Tengo que pensar permanentemente sobre el problema con la operación de clasificación personalizada que te prometí (en el comentario) para implementar en la versión futura de jqGrid desde mi fork . Al final, implementé la función ahora. Lo presento a continuación.

La primera demostración usa Searching Toolbar y la segunda demo usa Advanced Searching . Ambos usan la configuración jqGrid común que permite realizar una operación de búsqueda personalizada en datos locales.

En primer lugar, debe definirse una nueva operación de búsqueda personalizada. Lo uso en la operación de demostración IN que permite definir una regla con múltiples valores . Utilizo la operación personalizada en la columna “impuesto”. Permite filtrar por múltiples valores divididos por punto y coma ( ; ). El código correspondiente se ve a continuación

 $("#grid").jqGrid({ colModel: [ { name: "tax", label: "Tax", width: 100, template: "number", //sopt contains CUSTOM operation "nIn" searchoptions: { sopt: ["nIn", "eq", "ne", "lt", "le", "gt", "ge", "in", "ni"] } }, ... ], customSortOperations: { // the properties of customSortOperations defines new operations // used in postData.filters.rules items as op peroperty nIn: { operand: "nIN", // will be displayed in searching Toolbar for example text: "numeric IN", // will be shown in Searching Dialog or operation menu in searching toolbar title: "Type multiple values separated by semicolon (";") to search for one from the specified values", buildQueryValue: function (otions) { // the optional callback can be called if showQuery:true option of the searching is enabled return otions.cmName + " " + otions.operand + " (" + otions.searchValue.split(";").join("; ") + ") "; }, funcName: "myCustomIn" // the callback function implements the compare operation } }, myCustomIn: function (options) { // The method will be called in case of filtering on the custom operation "nIn" // All parameters of the callback are properties of the only options parameter. // It has the following properties: // item - the item of data (exacly like in mydata array) // cmName - the name of the field by which need be filtered // searchValue - the filtered value typed in the input field of the searching toolbar var fieldData = options.item[options.cmName], data = $.map( options.searchValue.split(";"), function (val) { return parseFloat(val); } ); return $.inArray(parseFloat(fieldData), data) >= 0; } }); 

Como resultado, la operación "nIn" se colocará en propiedad op de filters.rules de la misma manera que la operación "en" estándar, por ejemplo. jqGrid muestra la operación como "nIN" en la barra de herramientas de búsqueda (ver la propiedad valeu of operand operand: "nIN" ). La tooltip propiedades define la información sobre herramientas que se muestra sobre la operación.

enter image description here

y uno puede filtrar los resultados como en el gif animado a continuación

enter image description here

Durante el filtrado, jqGrid llama a myCustomIn callback. Entonces uno está absolutamente libre de cómo implementar la operación correspondiente.

De la misma manera, también se puede usar Búsqueda avanzada:

enter image description here

ACTUALIZADO: El artículo de wiki describe la nueva característica más detallada.