【问题标题】:How to update autoGroupColumnDef property of ag-Grid after table is initialized如何在表初始化后更新 ag-Grid 的 autoGroupColumnDef 属性
【发布时间】: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。我尝试了以下选项,但没有一个对我有用:

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

任何帮助将不胜感激!

【问题讨论】:

    标签: angularjs ag-grid ag-grid-angular


    【解决方案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();
      

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

      【讨论】:

        猜你喜欢
        • 2020-01-03
        • 1970-01-01
        • 2020-09-08
        • 2019-08-23
        • 2020-08-15
        • 1970-01-01
        • 2019-08-16
        • 1970-01-01
        • 2016-05-17
        相关资源
        最近更新 更多