如何导出所有应该只有可见列的jqgrid数据,而不考虑分页
问题描述:
我想知道是否有任何方法可以获得所有可见列的jqGrid数据,而不管分页。如何导出所有应该只有可见列的jqgrid数据,而不考虑分页
$("#listTableSupply").jqGrid("getGridParam", "data");
但它显示我所传递给jqGrid的所有JSON数据。当我在jqgrid中使用分页时,如果我使用
$('#list').jqGrid('getRowData');
我只从第1页获得记录。
我需要知道是否有任何方法,我不得不使用可见列获取所有数据,而不考虑分页。
答
使用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));
}
谢谢奥列格。当我在jqgrid中过滤数据时它会起作用吗?由于我需要只显示过滤器数据,如果任何过滤完成 – user1268130
@ user1268130:欢迎您!如果您需要使用过滤的数据而不是完整的数据,那么您应该从'lastSelectedData'而不是'data'获取数据(参见[旧演示](http://www.ok-soft-gmbh.com/jqGrid/) OK/GetFilteredData.htm)和[答案](http://stackoverflow.com/a/31568275/315935)和[this old one](http://stackoverflow.com/a/9831125/315935)) – Oleg
谢谢奥列格。现在将检查出来。 :) – user1268130