ag-grid - изменяет высоту детали при изменении данных - PullRequest
1 голос
/ 15 марта 2019

У меня есть таблица, использующая конфигурацию Master / Detail, и я использую обратный вызов 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));
    }
  }

и я ожидаю, что вызов resetRowHeights снова вызовет getRowHeight, основываясь на https://www.ag -grid.com / javascript-grid-row-height / # api-resetrowheights :

api.resetRowHeights()

Вызовите этот API, чтобы сетка очищала все высоты строк и снова обрабатывала их все с нуля - если вы предоставите обратный вызов getRowHeight (), он будет вызываться снова для каждой строки. Сетка затем изменит размеры и переместит все строки снова. Это подход дробовика.

Однако наблюдаемое мной поведение getRowHeight запускается только для основных строк и не строк сетки подробностей (не строк в таблице подробностей, а высоты строки сетки подробностей). сам).

Надеюсь, это понятно, спасибо за любые отзывы.

1 Ответ

0 голосов
/ 15 марта 2019

У меня есть кое-что, что работает для моего случая, если у кого-то когда-либо возникает такая же проблема. Я заметил, что для узлов детализации ag-grid не очищает высоту строки на resetRowHeights, поэтому я обновил свой метод обновления для обработки этого:

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.

...