我正在使用最新的免费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'
});
谢谢你, 麦克
答案 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
属性的设置。