ag-grid-更改数据时调整细节高度的大小

时间:2019-03-15 11:56:56

标签: javascript reactjs ag-grid ag-grid-react

我有一个使用主/详细配置的表,并且正在使用getRowHeight回调。

高度的初始设置可以正常工作。我的期望是,在更新表数据时,将重新计算包含明细网格的行的高度,但我似乎无法触发这些尺寸的调整。

我的getRowHeight定义是:

getRowHeight = params => params.node.detail ? this.getDetailHeight(params) : 48;

getDetailHeight = params => {
  let rows = params.data.filterData.length;
  return rows * 48 + 116; // all rows height + (header & footer)
};

该表的数据将按照这样的方式进行更新(设置了deltaRowDataMode标志):

componentDidUpdate() {
    if (this && this.gridApi) {
      this.gridApi.setRowData(_.cloneDeep(this.props.data));
      this.gridApi.resetRowHeights();
      this.gridApi.forEachDetailGridInfo(detail => detail.api.resetRowHeights());
      this.gridApi.redrawRows(_.cloneDeep(this.props.data));
    }
  }

,我希望根据https://www.ag-grid.com/javascript-grid-row-height/#api-resetrowheights,对resetRowHeights的调用会再次触发getRowHeight

  

api.resetRowHeights()

     

调用此API,以使网格清除所有行高,并从头开始重新计算所有行高-如果您提供getRowHeight()回调,则会为每一行再次调用它。然后,网格将重新调整大小并重新定位所有行。这是the弹枪的方法。

但是,我看到的行为是getRowHeight仅针对主行被触发,而不是对明细网格行(不是明细表中的行,而是明细表的高度)被触发详细信息网格行本身。

我希望这很清楚,谢谢您的反馈。

2 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,我有一些适合我的情况的东西。我注意到,对于详细节点,ag-grid不会清除resetRowHeights上的行高,因此我已经更新了update方法来处理此问题:

componentDidUpdate() {
    if (this && this.gridApi) {
      this.gridApi.setRowData(_.cloneDeep(this.props.data));
      // call to resetRowHeights will apply the changes from forEachNode(..)
      this.gridApi.forEachNode(row => row.detailNode && row.detailNode.setRowHeight(null));
      this.gridApi.resetRowHeights();
      this.gridApi.redrawRows(_.cloneDeep(this.props.data));
    }
  }

这将重置详细信息节点的rowHeight,以便ag-grid重新运行getRowHeight调用。

答案 1 :(得分:0)

我已经连接到 rowDataChanged 事件 (https://www.ag-grid.com/javascript-grid/grid-events/#reference-miscellaneous),此时我正在调用 this.gridApi.resetRowHeights(); - 它仅在我的数据更改时更新高度(而不是调整大小,或重新绘制网格)。

onRowDataChanged(params) {
  this.gridApi.resetRowHeights();
}