2017-01-03 9 views
1

Я хочу знать, есть ли какой-либо метод для получения всех данных jqGrid видимых столбцов независимо от подкачки.Как экспортировать все данные jqgrid, которые должны иметь только видимые столбцы, независимо от подкачки

$("#listTableSupply").jqGrid("getGridParam", "data"); 

Но он показывает все данные json, которые я передал jqgrid. Поскольку я использую пейджинг в jqgrid, если использую

$('#list').jqGrid('getRowData'); 

Я получаю только записи с 1-й страницы.

Мне нужно знать, есть ли способ получить все данные с видимыми столбцами независимо от поискового вызова.

ответ

0

Использование 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)); 
} 
+0

Спасибо Олегу. Будет ли он работать, когда я буду фильтровать свои данные в jqgrid. Поскольку мне нужно показывать только данные фильтра, если какая-либо фильтрация выполнена – user1268130

+0

@ 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

+0

Спасибо Олег. Вы проверите это сейчас. :) – user1268130