2015-07-02 55 views
0

我使用最新的免費jqGrid(今天拉)。我正在使用columnChooser。默認情況下,我將所有可用的列加載到網格中。我使用columnChooser刪除了幾列。這很好。jqgrid getRowData忽略columnChooser

我使用getRowData()來導出網格數據。這很好,甚至維護我的過濾器和排序。但getRowData總是返回所有列,即使我使用columnChooser將其刪除。

我該如何讓getRowData只包含網格中可見的列?我試過重新加載,並且remapColumns沒有成功。

$('#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' 
}); 

謝謝 邁克

回答

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屬性。

+0

謝謝奧列格!我做了一個小小的改變。我刪除了這一行: – Mike

+0

@Mike:不客氣! – Oleg

+1

我刪除了這一行:item.id = $ .jgrid.stripPref(idPrefix,tr.id);因爲它在每行的末尾返回我的第一列(ID)。但在某些情況下,我可以看到它的價值。也許可以使getRowData接受參數{hidden:false,id:false} ?? – Mike