删除 ag 网格中的叶级行

问题描述 投票:0回答:3

我有一个要求,我需要删除/隐藏农业网格中的叶级别记录,因为它向最终用户显示了令人困惑的行为。如屏幕截图所示,我需要删除/隐藏每组中的最后一条记录(以红色突出显示),因为上面的记录描绘了相同的数据。

我尝试使用 updateRowData 来删除,如下所示:

 this.gridApi.forEachLeafNode(function(rowNode, index) {
     self.gridApi.updateRowData({ remove: [rowNode.data] });
   });

上面的代码删除了所有数据,因为在我的例子中,第二层和第三层(叶)中显示的数据是相同的。无论如何,我可以只删除标记为红色的吗?

我还尝试了其他技术,例如按照文档的建议将数据添加到叶级记录,但没有任何效果。

PS:删除可能不是唯一的选择。如果可以不渲染,那么也将满足要求。任何指导都会有帮助

javascript ag-grid ag-grid-angular
3个回答
0
投票

不确定这是否是最好的,但这是一种解决方案。

假设您有类似这样的网格模板

<ag-grid-angular
  #agGrid
  [rowData]="rowData"
  ... // snip!
  [getDataPath]="getDataPath"  // This one is key
  (gridReady)="onGridReady($event)"
></ag-grid-angular>

数据是这样的:

this.rowData = [
  { entry: ['A'] },
  {
    entry: ['A', 'B'],
  },
  {
    entry: ['C', 'D'],
  },
  {
    entry: ['E', 'F', 'G', 'H'],
  },
];

稍后声明函数时:

this.getDataPath = function(data) {
  // This returns the hiarchy normally
  return data.entry;     
};

但是如果我们可以稍微修改一下呢?

this.getDataPath = function(data) {
  // If there are more than two levels, we'll just slice those off.        
  if( data.entry.length > 2 ) {
    return data.entry.slice(0,2);
  }
  return data.entry;
};

当然,我们可以在切片之前比较值或过滤。

(我几乎没有接触过 Angular,但我按照这里的 plunker 链接https://www.ag-grid.com/javascript-grid-tree-data/ 并做了一些简单的编辑。)


0
投票

您会发现,如果按照此处的说明启用透视,它将不再显示最终的叶节点。然而,切换到 PivotMode 有很多副作用,您应该对其进行测试。


0
投票

添加答案,以防有人提出类似的要求。

我们可以通过添加“externalRowFilter”来做到这一点。

你需要做的是默认启用过滤器,然后过滤掉叶子节点:

isExternalFilterPresent: () => return true,

doesExternalFilterPass: (node) => return node.data.group,
© www.soinside.com 2019 - 2024. All rights reserved.