我有一个要求,我需要删除/隐藏农业网格中的叶级别记录,因为它向最终用户显示了令人困惑的行为。如屏幕截图所示,我需要删除/隐藏每组中的最后一条记录(以红色突出显示),因为上面的记录描绘了相同的数据。
我尝试使用 updateRowData 来删除,如下所示:
this.gridApi.forEachLeafNode(function(rowNode, index) {
self.gridApi.updateRowData({ remove: [rowNode.data] });
});
上面的代码删除了所有数据,因为在我的例子中,第二层和第三层(叶)中显示的数据是相同的。无论如何,我可以只删除标记为红色的吗?
我还尝试了其他技术,例如按照文档的建议将数据添加到叶级记录,但没有任何效果。
PS:删除可能不是唯一的选择。如果可以不渲染,那么也将满足要求。任何指导都会有帮助
不确定这是否是最好的,但这是一种解决方案。
假设您有类似这样的网格模板
<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/ 并做了一些简单的编辑。)
您会发现,如果按照此处的说明启用透视,它将不再显示最终的叶节点。然而,切换到 PivotMode 有很多副作用,您应该对其进行测试。
添加答案,以防有人提出类似的要求。
我们可以通过添加“externalRowFilter”来做到这一点。
你需要做的是默认启用过滤器,然后过滤掉叶子节点:
isExternalFilterPresent: () => return true,
doesExternalFilterPass: (node) => return node.data.group,