how to export all jqgrid data which should have on

2019-03-01 18:01发布

问题:

I want to know whether there is any method to get all jqGrid data of visible columns irrespective of paging.

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

But it shows all json data which I have passed to jqgrid. As I use paging in jqgrid if I use

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

I get only the records from 1st Page.

I need to know is there any way that I have to get all data with visible columns irrespective of paging.

回答1:

The usage of getGridParam with data is the correct way. If you need to remove some properties from the item or the array then you should make deep copy of the array (by usage of $.extend(true, {}, data)) and remove unneeded properties from every item of the array.

Alternatively you can copy all properties with non-hidden columns in new array. The code could be about the following:

// 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;
}

I don't tested the above code, but I hope it fill newData array with the data, which you need.

UPDATED: I created the demo for you, which demonstrates the usage of lastSelectedData instead of data. It fills in the resulting array newData the filtered items of the grid, including only visible columns. You can filter the data and then click on the button "Show non-hidden fields of filtered and sorted data". The demo fills the newData array and display it. I used the following code inside of click handler:

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));
}