我有一个使用主/详细配置的表,并且正在使用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
仅针对主行被触发,而不是对明细网格行(不是明细表中的行,而是明细表的高度)被触发详细信息网格行本身。
我希望这很清楚,谢谢您的反馈。
答案 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();
}