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

问题描述:

我想知道是否有任何方法可以获得所有可见列的jqGrid数据,而不管分页。如何导出所有应该只有可见列的jqgrid数据,而不考虑分页

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

但它显示我所传递给jqGrid的所有JSON数据。当我在jqgrid中使用分页时,如果我使用

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

我只从第1页获得记录。

我需要知道是否有任何方法,我不得不使用可见列获取所有数据,而不考虑分页。

使用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)); 
} 
+0

谢谢奥列格。当我在jqgrid中过滤数据时它会起作用吗?由于我需要只显示过滤器数据,如果任何过滤完成 – user1268130

+0

@ user1268130:欢迎您!如果您需要使用过滤的数据而不是完整的数据,那么您应该从'lastSelectedData'而不是'data'获取数据(参见[旧演示](http://www.ok-soft-gmbh.com/jqGrid/) OK/GetFilteredData.htm)和[答案](http://*.com/a/31568275/315935)和[this old one](http://*.com/a/9831125/315935)) – Oleg

+0

谢谢奥列格。现在将检查出来。 :) – user1268130