Как обновить свойство autoGroupColumnDef ag-Grid после инициализации таблицы

У меня есть таблица ag-grid (версия Enterprise: 22.1.0), которая сгруппирована с использованием свойства autoGroupColumnDef. Группировка зависит от данных таблицы, и данные загружаются при нажатии кнопки. Мне нужно обновить имя поля свойства 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'

Любая помощь будет оценена по достоинству!


person Aswathy Nair    schedule 29.04.2020    source источник


Ответы (3)


Я связался со службой поддержки ag-grid, и, по-видимому, это ошибка, и она есть в их невыполненных работах, а ETA пока нет. Обходной путь, который они предоставили, заключался в использовании: https://www.ag-grid.com/javascript-grid-grouping/#showRowGroup.

Это не очень хороший обходной путь, потому что сгруппированные столбцы разделены и делают страницу тесной. Также есть некоторые проблемы с внешним видом, которые продолжают появляться (например: пустое пространство добавляется перед каждым столбцом, которое увеличивается с каждым сгруппированным столбцом. т. е. перед вторым столбцом добавляется 1 см, перед третьим столбцом добавляется 2 см и так далее. Я предполагаю, что это было добавлено, чтобы сгруппировать столбец группы, но вы не ожидаете такого поведения, когда столбцы разделены.)

идентификатор невыполненной работы ag-grid для заявки: AG-3359 — разрешить использование autoGroupColumn в вызовах API для столбцов, в настоящее время нет возможности динамически изменить его после создания. (т. е. setColumnDefs…)

Ссылка для отслеживания прогресса: https://www.ag-grid.com/ag-grid-pipeline/

person Aswathy Nair    schedule 08.05.2020
comment
Спасибо за усилия, которые вы предприняли, чтобы связаться с командой ag-grid, чтобы получить ясность по этому вопросу. - person Praveen; 08.05.2020

Для этого есть хороший обходной путь. Вы можете установить 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);
person cbishop    schedule 08.10.2020

существует прямой метод обновления объекта autoGroupColumnDef и его свойств с помощью setAutoGroupColumnDef

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

if any problems with the spread operator, do it manually:

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();

он сохраняет строки расширенными, если они есть, флажок установлен, если есть.

person pinarella    schedule 30.03.2021