Установить новое определение столбца с помощью setColumnDefs больше не работает

Я пытаюсь установить новые определения столбцов, вызывая setColumnDefs с помощью API сетки. Это не работает, как ожидалось. Имена заголовков столбцов больше не будут обновляться!

См. этот Plunkr: Версия 19.1.x

Версия 19.0.0 — последняя рабочая версия.

См. этот Plunkr: Версия 19.0.0

Для меня это кажется ошибкой!?

В моем проекте я использую Angular 5 и замечаю такое же поведение.


person Daniel C.    schedule 03.12.2018    source источник


Ответы (2)


Я смог воспроизвести ваше поведение. Работает следующий (грязный) обходной путь:

  gridOptions.api.setColumnDefs([]);
  gridOptions.api.setColumnDefs(newColDefs);

Установка columnDefs в пустой массив, а затем передача newColDefs, кажется, достигает того, что вы ищете.

person Alexander Zbinden    schedule 13.12.2018
comment
Вероятно, сэкономил мне пару часов отладки. Спасибо! - person elveti; 17.01.2019
comment
Это работает, но для моделей строк на стороне сервера дважды инициируется поисковый запрос, что далеко не идеально. - person mopo922; 11.11.2020
comment
Это также очищает примененную модель фильтра, поэтому необходимо будет повторно применить фильтр. - person Bnrdo; 21.01.2021

Я полагаю, это связано с новым способом обнаружения изменений в последней версии.

Если вы обновите свой код следующим образом:

function updateColDef()
{ 
    let data = [];
    columnDefs.forEach(function(colDef) { 
        colDef.headerName = colDef.headerName + ' X ';
        data.push(colDef);
  })

  data.push( {
      headerName: 'New Column',
  });

  gridOptions.api.setColumnDefs(data);
}

Он будет работать так, как ожидалось.

Обновление:

Когда установлены новые столбцы, сетка будет сравниваться с текущими столбцами и определять, какие столбцы являются старыми (которые должны быть удалены), новыми (создаются новые столбцы) или сохраненными (оставшиеся столбцы сохранят свое состояние, включая положение, фильтрацию и сортировку).

Сравнение определений столбцов выполняется по 1) сравнению ссылки на объект и 2) идентификатору столбца, например colDef.colId. Если совпадает либо ссылка на объект, либо идентификатор столбца, то сетка обрабатывает столбцы как один и тот же столбец.

В первом случае это было сравнение объектов, во втором примере (после обновления) его colId случай.

изменения произошли из версии 19.1

AG-1591 Разрешить дельта-изменения в определениях столбцов.

person un.spike    schedule 04.12.2018
comment
В моем реальном сценарии я не хочу менять только имена заголовков, я хочу изменить все определение столбца. Единственное, что может быть одинаковым, это свойство ColId. - person Daniel C.; 04.12.2018
comment
Ваш ответ не является ответом, это всего лишь обходной путь для возможной ошибки / критического изменения. Если новое поведение предусмотрено дизайном, то это критическое изменение в обновлении дополнительной версии. Кстати: я немного обновил свой plunkr! - person Daniel C.; 04.12.2018
comment
Большое спасибо за обновление. Затем для меня реализация запроса функции AG-1591 представляет собой серьезное изменение в общедоступном API Grid. И я думаю, многие покупатели это заметят. Почему это не включено в примечания к выпуску как критическое изменение!? - person Daniel C.; 04.12.2018
comment
ищите дополнительную информацию здесь: setColumnDefs не перерисовывает сетку - person Daniel C.; 04.12.2018