Нет прямого способа получить нужную вам информацию. Внутренне jqGrid использует $. Jgrid.from для фильтрации локальных данных. Основной код, который использует $.jgrid.from
внутри addLocalData . Чтобы получить результаты, которые вам нужны, без изучения всего кода, я предлагаю использовать тот факт, что все отфильтрованные данные будут возвращены select
методом $.jgrid.from
(см. строка кода). Я предлагаю перехватить данные, прежде чем они будут обрезаны до размера страницы.
Для этого я предлагаю использовать подклассификацию: перезапись метода select
метод $.jgrid.from
. Я демонстрирую технику в примерах, созданных для ответа и этого .
В вашем случае код будет
var oldFrom = $.jgrid.from,
lastSelected;
$.jgrid.from = function (source, initalQuery) {
var result = oldFrom.call(this, source, initalQuery),
old_select = result.select;
result.select = function (f) {
lastSelected = old_select.call(this, f);
return lastSelected;
};
return result;
};
Теперь переменная lastSelected
сохранит массив элементов, которые являются результатами последней операции сортировки или фильтрации. Поскольку $.jgrid.from
является глобальным, данные не связаны с сеткой. Если у вас есть более одной сетки на странице, это будет неудобно. Небольшой недостаток можно исправить с помощью следующей строки в коде loadComplate
каждой сетки:
loadComplete: function () {
this.p.lastSelected = lastSelected; // set this.p.lastSelected
}
Таким образом, мы вводим новый параметр jqGrid lastSelected
, который будет иметь близкую структуру как параметр data
, но будет содержать только последние отфильтрованные данные.
Следующий код отобразит идентификаторы отфильтрованных данных в alert
сообщении
$("#getIds").click(function () {
var filteredData = $grid.jqGrid('getGridParam', 'lastSelected'), i, n, ids = [],
idName = $grid.jqGrid('getGridParam', 'localReader').id;
if (filteredData) {
for (i = 0, n = filteredData.length; i < n; i++) {
ids.push(filteredData[i][idName]);
}
alert("tolal number of filtered data: " + n + "\n" +
"ids of filtered data:\n" + ids.join(', '));
}
});
Я использовал localReader.id параметр, потому что имя свойства, используемое для локальных данных, обычно id
или _id_
. _id_
будет использоваться в случае данных, загруженных с сервера, если используется опция loadonce: true
.
Демо демонстрирует подход. Если один фильтр, например, только данные из FedEx, а затем нажать кнопку «Показать идентификаторы», то он увидит информацию обо всех отфильтрованных, а не только о данных, отображаемых на текущей странице:
ОБНОВЛЕНО : бесплатно jqGrid предоставляет новую опцию lastSelectedData
. См. демоверсию в списке демонстраций .