Использование getGridParam
с data
является правильным способом. Если вам нужно удалить некоторые свойства из элемента или массива, вы должны сделать глубокую копию массива (используя $.extend(true, {}, data)
) и удалить ненужные свойства из каждого элемента массива.
В качестве альтернативы вы можете скопировать все свойства с помощью не скрытых столбцов в новый массив. Код может быть примерно следующее:
// get the reference to all parameters of the grid
var p = $("#listTableSupply").jqGrid("getGridParam");
// save the list of all non-hidden columns as properties of helper object
var colNames = {}, i, cm;
for (i = 0; i < p.colModel.length; i++) {
cm = p.colModel[i];
if (cm.hidden !== true) {
colNames[cm.name] = true;
}
}
// We have now colNames object with properties,
// which correspond to non-hidden columns of the grid
// Make copy of p.data including only non-hidden columns
var newData = new Array(p.data.length), prop, newItem, item;
for (i = 0; i < p.data.length; i++) {
item = p.data[i];
newItem = {};
for (prop in item) {
if (item.hasOwnProperty(prop) && colNames[prop]) {
// fill only properties of non-hidden columns
newItem[prop] = item[prop];
}
}
newData[i] = newItem;
}
Я не тестировал код выше, но я надеюсь, что это заполнить newData
массив с данными, которые вам нужны.
ОБНОВЛЕНО: Я создал the demo для вас, который демонстрирует использование lastSelectedData
вместо data
. Он заполняет результирующий массив newData
отфильтрованными элементами сетки, включая только видимые столбцы. Вы можете фильтровать данные, а затем нажать кнопку «Показать не скрытые поля фильтрованных и отсортированных данных». Демо заполняет массив newData
и отображает его. Я использовал следующий код внутри обработчика click
:
var p = $grid.jqGrid("getGridParam"), filteredData = p.lastSelectedData,
idName = p.localReader.id, i, cm, prop, newItem, item,
colNames = {}, newData;
if (p.lastSelectedData.length > 0) {
for (i = 0; i < p.colModel.length; i++) {
cm = p.colModel[i];
if (cm.hidden !== true && $.inArray(cm.name, ["rn", "cb", "subgrid"]) < 0) {
colNames[cm.name] = true;
}
}
colNames[idName] = true;
newData = new Array(p.lastSelectedData.length);
for (i = 0; i < p.lastSelectedData.length; i++) {
item = p.lastSelectedData[i];
newItem = {};
for (prop in item) {
if (item.hasOwnProperty(prop) && colNames[prop]) {
// fill only properties of non-hidden columns
newItem[prop] = item[prop];
}
}
newData[i] = newItem;
}
alert(JSON.stringify(newData));
}
Спасибо Олегу. Будет ли он работать, когда я буду фильтровать свои данные в jqgrid. Поскольку мне нужно показывать только данные фильтра, если какая-либо фильтрация выполнена – user1268130
@ user1268130: Добро пожаловать! Если вам нужно использовать отфильтрованные данные вместо полных данных, вы должны получить данные из 'lastSelectedData' вместо' data' (см. [Старое демо] (http://www.ok-soft-gmbh.com/jqGrid/ OK/GetFilteredData.htm) и [ответ] (http://stackoverflow.com/a/31568275/315935) и [этот старый] (http://stackoverflow.com/a/9831125/315935)) – Oleg
Спасибо Олег. Вы проверите это сейчас. :) – user1268130