如何导出所有应该只有可见列的jqgrid数据,而不管分页

时间:2017-01-03 11:00:03

标签: jquery json jqgrid export free-jqgrid

我想知道是否有任何方法可以获取可见列的所有jqGrid数据而不管分页。

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

但它显示了我传递给jqgrid的所有json数据。因为我在jqgrid中使用分页,如果我使用

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

我只获得第1页的记录。

我需要知道有什么方法可以使用可见列来获取所有数据而不管分页。

1 个答案:

答案 0 :(得分:0)

getGridParamdata的使用是正确的方法。如果你需要从项目或数组中删除一些属性,那么你应该对数组进行深度复制(通过使用$.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));
}