如何在表初始化后更新 ag-Grid 的 autoGroupColumnDef 属性

Posted

技术标签:

【中文标题】如何在表初始化后更新 ag-Grid 的 autoGroupColumnDef 属性【英文标题】:How to update autoGroupColumnDef property of ag-Grid after table is initialized 【发布时间】:2020-08-13 17:54:55 【问题描述】:

我有一个使用 autoGroupColumnDef 属性分组的 ag-grid 表(企业版:22.1.0)。分组取决于表的数据,并且数据在单击按钮时加载。我需要在页面加载后,在加载数据之前更新autoGroupColumnDef 属性的字段名称(下面代码中的_this.colName)。

表格的网格选项:

_this.gridOptions = 
  defaultColDef: 
      sortable: true,
      resizable: true,
      filter: true
  ,
  columnDefs: _this.columnDefs,
  rowData: [],
  enableRangeSelection: true,
  autoGroupColumnDef: 
    headerName: "Sector",
    field: _this.colName,
    cellRendererParams: 
      suppressCount: true
    ,
    tooltipValueGetter: function(params) 
      return _this.tooltipVal
    
  ,
  suppressAggFuncInHeader: true, 
  enableBrowserTooltips: true
;

我在将数据设置到网格之前更新了变量_this.colName。我尝试了以下选项,但没有一个对我有用:

    _this.gridOptions.api.refreshClientSideRowModel('group'); _this.gridOptions.api.refreshCells(); _this.gridOptions.autoGroupColumnDef.field = 'Column's Name'

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

有一个很好的解决方法。您可以设置 autoGroupColumnDef,然后删除并读取所有行分组。它将使用新名称重绘组列。

    gridOptions.autoGroupColumnDef.headerName = 'new_name';
    
    // Get current groupings
    var colstate = gridOptions.columnApi.getColumnState();
    var colstateclear = gridOptions.columnApi.getColumnState();

    // Clear groupings
    var x = 0, xcount = colstateclear.length;
    while ( x < xcount ) 
        colstateclear[x].rowGroupIndex = null;
        x += 1;
    
    gridOptions.columnApi.setColumnState(colstateclear);
    
    // Reset groupings  
    gridOptions.columnApi.setColumnState(colstate);

【讨论】:

【参考方案2】:

我联系了 ag-grid 支持,显然这是一个错误,他们的积压工作中有它,目前没有可用的 ETA。他们提供的解决方法是使用:https://www.ag-grid.com/javascript-grid-grouping/#showRowGroup。

这并不是一个很好的解决方法,因为分组的列是分开的,使页面显得局促。还有一些外观和感觉问题不断出现(例如:在每列之前添加的空白空间随着每个分组列的增加而增加。即第二列之前添加了 1 厘米,第三列之前添加了 2 厘米,依此类推。我猜这是为了在 group 列中带来分组外观,但是当列分开时你不会期望这种行为。)

ag-grid 的工单积压 ID:AG-3359 - 允许在 API 调用列中使用 autoGroupColumn,目前无法在创建后动态更改它。 (即,setColumnDefs ...)

跟踪进度的链接:https://www.ag-grid.com/ag-grid-pipeline/

【讨论】:

感谢您与 ag-grid 团队联系以澄清此问题。【参考方案3】:

有一种直接的方法可以使用 setAutoGroupColumnDef

更新 autoGroupColumnDef 对象及其属性

this.gridOptions.api.setAutoGroupColumnDef(<ColDef>
    ...this.gridOptions.autoGroupColumnDef, // preserve the other settings except the ones you need to change
    minWidth: 500
  )

如果展开运算符有任何问题, 手动执行:

this.gridOptions.api.setAutoGroupColumnDef(<ColDef>
    // ...this.gridOptions.autoGroupColumnDef, // preserve the other settings except the ones you need to change
headerName: this.gridOptions.autoGroupColumnDef.headerName,
    minWidth: 500
  )

还有一件事,如果您有任何视觉错误,请添加此内容,例如:标题行已调整大小但下面的行保持与之前的状态相同,因此需要刷新模型:

this.gridOptions.api.refreshClientSideRowModel();

此刷新不是理想的解决方案,因为它会刷新所有内容,因此您将失去扩展级别,例如,仍然不知道如何保留所有设置。 https://angulargrid.com/angular-grid/client-side-model/#refreshing-the-client-side-model

目前最好的解决方案是你使用:

this.gridOptions.api.redrawRows();

如果是则保持行展开,如果是则选中复选框。

【讨论】:

以上是关于如何在表初始化后更新 ag-Grid 的 autoGroupColumnDef 属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 React 加载新表后使用新数据更新 ag-grid

如何将两个数据表内容的滚动同步在一起(ag-grid)

如何在 Angular 6 中将 ag-grid 从版本 18.1.0 更新到 20.1.0?

Ag-Grid:应用过滤器后如何保存和重新加载列

如何在行删除后升级/刷新 ag-grid?

ag-grid 表格溢出屏幕