2015-09-22 102 views
2

我使用jqGrid創建了一個具有多個子網格級別的網格,並從answer獲得了一些幫助。以下是我目前有:如何僅在特定行上顯示jqGrid子網格?

Grid current status

我想修改的方式,只顯示子格是否有數據顯示。換句話說,如果count > 0。按道理我嘗試添加的條件(以下僞代碼,基於前面提到的答案):

原始代碼

var gridParams = { 
    datatype: 'local', 
    data: myGridData, 
    colNames: ['Column 1', 'Column 2'], 
    colModel: [ 
     { name: 'col1', width: 200 }, 
     { name: 'col2', width: 200 } 
    ], 
    ... 
    subGrid: true, 
    subGridRowExpanded: function (subgridDivId, rowId) { 
     var subgridTableId = subgridDivId + "_t"; 
     $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>"); 
     $("#" + subgridTableId).jqGrid({ 
      datatype: 'local', 
      data: mySubgrids[rowId], 
      colNames: ['Col 1', 'Col 2', 'Col 3'], 
      colModel: [ 
       { name: 'c1', width: 100 }, 
       { name: 'c2', width: 100 }, 
       { name: 'c3', width: 100 } 
      ], 
      ... 
     }); 
    } 
} 

$("#grid").jqGrid(gridParams); 

調整代碼

var gridParams = { 
    datatype: 'local', 
    data: myGridData, 
    colNames: ['Column 1', 'Column 2'], 
    colModel: [ 
     { name: 'col1', width: 200 }, 
     { name: 'col2', width: 200 } 
    ], 
    ... 
} 

// Condition added HERE 
if (count > 0) 
{ 
    gridParams.subGrid = true; 
    gridParams.subGridRowExpanded = function (subgridDivId, rowId) { 
     var subgridTableId = subgridDivId + "_t"; 
     $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>"); 
     $("#" + subgridTableId).jqGrid({ 
      datatype: 'local', 
      data: mySubgrids[rowId], 
      colNames: ['Col 1', 'Col 2', 'Col 3'], 
      colModel: [ 
       { name: 'c1', width: 100 }, 
       { name: 'c2', width: 100 }, 
       { name: 'c3', width: 100 } 
      ], 
      ... 
     }); 
    } 
} 

$("#grid").jqGrid(gridParams); 

但只是失敗慘不忍睹:

enter image description here

這是根本不支持或我做錯了什麼?

回答

2

如果我正確理解你的問題,那麼你想刪除子網格中沒有元素的行的「+」(展開子網格)圖標。在這種情況下,您可以遵循the old answer中描述的舊技巧。您可以添加loadComplete手柄,該手柄會從網格中刪除一些具有subGrid: true選項的「+」圖標。你只需要知道其中有沒有子網格網格的所有行的rowid和更新的行

$("#" + rowid + ">td.sgcollapsed").unbind("click").html(""); 

做:我張貼的free jqGrid,可以方便地實現沒有上述黑客的要求修改。

The demo演示新功能。實施非常簡單。它包含hasSubgridsubGridOptions之內的回調。該回調具有options,該對象具有屬性rowid,data和兩個較不重要的屬性iRowiCol。演示代碼使用代表該行數據的options.data。該演示創建亞格只有當輸入行有tax走高,20

subGridOptions: { 
    hasSubgrid: function (options) { 
     return parseFloat(options.data.tax) > 20; 
    } 
} 

你可以在你的情況下使用mySubgrids[options.data.rowid].length,如果我理解正確輸入數據的格式。

+0

我在想沒有在第一個地方填充一個空網格,但是這個hgack完全可以做到這一點!謝謝! –

+1

@MoslemBenDhaou:我的意思是不是人口的子網格。相反,你可以在**父網格**中包含黑客。它將防止在父網格的行中添加「+」圖標,因此不會爲該行填充子網格。順便說一下,我準備修改[免費jqGrid](https://github.com/free-jqgrid/jqGrid)(我從2014年底開始開發的jqGrid的分支),它在'subGridOptions'中引入了'hasSubgrid'回調'。該回調通知jqGrid應在哪些行中添加「+」圖標,而哪些不是。我會很快發佈修改並通知您。 – Oleg

+1

@MoslemBenDhaou:我發佈了修改[這裏](https://github.com/free-jqgrid/jqGrid/commit/6922b6e184490426ffdbc23cd9ed74faebbee166)。所以你可以從GitHub下載最新的代碼或者使用[url](https://github.com/free-jqgrid/jqGrid/wiki/Access-free-jqGrid-from-different-CDNs#access-githib-code -from-rawgit)。 – Oleg