я должен постоянно думать о проблеме с пользовательской операции сортировки, которую я обещал вам (в комментарии) реализовать в будущей версии jqGrid от my fork. В конце я реализовал эту функцию. Я представляю его ниже.
The first demo использует Searching Toolbar и the second demo использует Advanced Searching. Оба используют общие настройки jqGrid, которые позволяют сделать пользовательскую операцию поиска по локальным данным.
Прежде всего, необходимо определить новый пользовательский поиск. Я использую в операции demo IN, которая позволяет определить одно правило с несколько значений. Я использую пользовательскую операцию в столбце «tax». Он позволяет фильтровать несколько значений, разделенных точкой с запятой (;
). Соответствующий код выглядит, как показано ниже
$("#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;
}
});
В результате операция "nIn"
будет размещена в op
свойства filters.rules
таким же образом, как и в стандартной "en"
операции, например. jqGrid отображает операцию как "nIN"
на панели инструментов поиска (см. свойство valeu operand: "nIN"
). Свойство tooltip
определяет всплывающую подсказку, отображаемую над операцией.
и можно отфильтровать результаты, как на анимированного GIF ниже
Во время фильтрации вызовов jqGrid myCustomIn
обратного вызова. Так что абсолютно бесплатно, как реализовать соответствующую операцию.
Таким же образом можно использовать расширенный поиск слишком:
ОБНОВЛЕНО:The wiki article описывает новую функцию более детально.
Вы можете использовать цикл для заполнения массива 'rules'. Если вам нужно отправить фильтр на сервер, вы можете использовать '' ni ''операцию (« не в ») вместо« ne »' («не равно»). Важно, чтобы сервер «понимал» операцию. – Oleg
Я не отправляю его на сервер. Для параметра LoadOnce установлено значение true. Я фильтруюсь из загружаемых данных. –
, если вы не отправляете данные на сервер, тогда опция 'loadonce: true' будет проигнорирована. Массив правил, который будет применяться * локально *, должен работать без каких-либо проблем с 255 элементами. У вас есть проблемы с производительностью?Сколько строк данных необходимо фильтровать? – Oleg