如下图所示:分层表有两层(“父级”和“子级”)。在某些情况下,我们的用户需要扁平化层次结构,以便子级显示与其父级相同。目的是对该列表进行排序,而不考虑子父关系。扁平化还可以直观地过滤元数据(此处:状态)。
注:
我最初的方法是按需隐藏 AutoColumn。这似乎不起作用,并且评论
here似乎表明至少五年前这是不可能的。为了在下面的代码中演示,隐藏适用于 parent
,但不适用于
ag-Grid-AutoColumn
:
let isHierarchyVisible = gridApi.getColumn('ag-Grid-AutoColumn').isVisible();
gridApi.setColumnsVisible(['parent'], isHierarchyVisible);
gridApi.setColumnsVisible(['ag-Grid-AutoColumn'], !isHierarchyVisible);
辐射技术债务:我们已经成功创建了两个可以在(分层和扁平)之间切换的表。当用户想要隐藏行并在会话之间存储此可见性时,可以使用 getFilterModel() 和 setFilterModel() 来存储数据(与 cookie 结合使用)。然而,当在分层和扁平之间切换时,getFilterModel
的结构也会切换,如下所示:
Flat getFilterModel:
分层getFilterModel:
行分组”和“树数据”。我可以使用任何一种,但为了获得所需的行过滤器,树数据似乎是必要的。
示例代码Switch View
(在完整页面视图中),查看隐藏如何适用于
parent
,但不适用于
ag-Grid-AutoColumn
。
let gridApi;
const gridDiv = document.querySelector('#myGrid');
const agGridAutoColumnVisibleValue = document.querySelector('#ag-grid-auto-column-visible-value');
const columnDefs = [
{ field: 'parent', rowGroup: true, hide: true },
{ field: 'child' },
];
const rowData = [
{ parent: 'Parent A', child: 'Child A1' },
{ parent: 'Parent A', child: 'Child A2' },
{ parent: 'Parent B', child: 'A - Child B1' },
{ parent: 'Parent B', child: 'Child B2' },
];
const gridOptions = {
columnDefs: columnDefs,
rowData: rowData,
//autoGroupColumnDef: { field: 'parent' },
groupDefaultExpanded: -1,
};
function switchView() {
let isHierarchyVisible = gridApi.getColumn('ag-Grid-AutoColumn').isVisible();
gridApi.setColumnsVisible(['parent'], isHierarchyVisible);
gridApi.setColumnsVisible(['ag-Grid-AutoColumn'], !isHierarchyVisible);
agGridAutoColumnVisibleValue.textContent = gridApi.getColumn('ag-Grid-AutoColumn').isVisible();
gridApi.refreshCells();
}
gridApi = agGrid.createGrid(gridDiv, gridOptions)
agGridAutoColumnVisibleValue.textContent = gridApi.getColumn('ag-Grid-AutoColumn').isVisible();
<script src="https://cdn.jsdelivr.net/npm/ag-grid-enterprise/dist/ag-grid-enterprise.min.js"></script>
<button onclick="switchView()">Switch View</button>
<div>ag-Grid-AutoColumn.visible value: <code id="ag-grid-auto-column-visible-value"></code></div>
<div id="myGrid" style="height: 600px;width: 600px;" class="ag-theme-alpine"></div>
这在技术上是有效的,但上下文丢失(表中的导航,例如列的过滤、滚动和折叠被重置)或必须在重新创建时重新应用(产生额外的、不需要的代码/技术债务),其有用性和可用性成本就很高。 ).
所以仍然感谢任何非破坏性的解决方案。