2015-09-22 69 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