jqgrid getRowData忽略columnChooser

时间:2015-07-02 20:31:06

标签: jquery jqgrid

我正在使用最新的免费jqGrid(今天拉)。我正在使用columnChooser。默认情况下,我将所有可用列加载到网格中。我使用columnChooser删除了几列。这很有效。

我使用getRowData()导出网格数据。这很好用,甚至维护我的过滤器和排序。但getRowData总是返回所有列,即使我使用columnChooser删除它们。

如何让getRowData只包含网格中可见的列?我已经尝试重新加载,并且重新加载了Columns但没有成功。

$('#iown').jqGrid('navButtonAdd', '#iownpager', { caption: "", buttonicon: "ui-icon-calculator", onClickButton: function () {
    $('#iown').jqGrid('columnChooser',{modal: true, width: 550,
        done : function(perm) {
            if (perm) {
                $('#iown').jqGrid("remapColumns", perm, true);
            }
        }
    });
},
title: "Choose columns"
});


$("#iown").jqGrid('navButtonAdd','#iownpager', { caption: '', buttonicon: 'ui-icon-disk', onClickButton: function () {
    var gridData = jQuery("#iown").getRowData();
    var postData = JSON.stringify(gridData);

    JSONToCSVConvertor(postData, report, true);
},
title: 'Download Current Grid View',
id: 'iown-dl'
});

谢谢你, 麦克

1 个答案:

答案 0 :(得分:2)

我认为问题独立于columnChooser。您只使用getRowData从当前页面的所有列(包括隐藏列)返回数据

我建议您将getRowData的使用替换为以下代码

var iCol, $grid = $("#iown"), colModel = $grid.jqGrid("getGridParam", "colModel"),
    idPrefix = $grid.jqGrid("getGridParam", "idPrefix"), tr, td, cm, cmName, item,
    nCols = colModel.length, rows = $grid[0].rows, iRow, nRows = rows.length, data = [];

for (iRow = 0; iRow < nRows; iRow++) {
    tr = rows[iRow];
    if ($(tr).hasClass("jqgrow")) {
        item = {}; // item of returned data
        for (iCol = 0; iCol < nCols; iCol++) {
            cm = colModel[iCol];
            cmName = cm.name;
            if (!cm.hidden && cmName !== "cb" && cmName !== "subgrid" && cmName !== "rn" && cm.formatter !== "actions") {
                td = tr.cells[iCol];
                try {
                    item[cmName] = $.unformat.call($grid[0], td, { rowId: tr.id, colModel: cm }, iCol);
                } catch (exception) {
                    item[cmName] = $.jgrid.htmlDecode($(td).html());
                }
            }
        }
        item.id = $.jgrid.stripPref(idPrefix, tr.id);
        data.push(item);
    }
}

代码使用网格中的数据填充data数组,并且非常接近getRowData方法。我只添加了您需要的列的hidden属性的附加测试,仅删除了TreeGrid所需的一些代码并添加了id属性的设置。