jquery - editable - jqgrid github
Reglas de filtro JqGrid: ¿podemos filtrar en función de una matriz? (1)
Tengo que pensar permanentemente sobre el problema con la operación de clasificación personalizada que te prometí (en comentario) implementar en la futura versión de jqGrid desde mi bifurcación . Al final, implementé la función ahora. Lo presento a continuación.
La primera demostración utiliza la barra de herramientas de búsqueda y la segunda demostración utiliza la búsqueda avanzada . Ambos usan configuraciones comunes de jqGrid que permiten realizar operaciones de búsqueda personalizadas en datos locales.
En primer lugar, es necesario definir 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 valores múltiples 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 la propiedad
op
de
filters.rules
de la misma manera que la operación estándar
"en"
, por ejemplo.
jqGrid muestra la operación como
"nIN"
en la barra de herramientas de búsqueda (consulte el valeu del
operand: "nIN"
propiedad
operand: "nIN"
).
La
tooltip
propiedad define la información sobre herramientas que se muestra sobre la operación.
y uno puede filtrar los resultados como en el gif animado a continuación
Durante el filtrado, jqGrid llama a la devolución de llamada
myCustomIn
.
Entonces uno es absolutamente libre de cómo implementar la operación correspondiente.
Del mismo modo, también se puede usar la Búsqueda avanzada:
ACTUALIZADO: El artículo wiki describe la nueva característica más detallada.
Tengo una matriz de la que 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] },
]
},
});
El número de elementos en la matriz no es fijo. Pero el máximo que puede contener es 255. Entonces, ¿necesito escribir hasta 255 (como arriba) o hay alguna forma simple de lograr lo mismo?
Saludos,
Varun R