Логика выделения ячеек Ag-grid не работает должным образом

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

    (cellValueChanged) = "onDemandsCellValueChanged($event)"

И метод:

    onDemandsCellValueChanged(params): void {
    if (params.oldValue === params.newValue) {
      return;
    }

    params.data.modified = true; // add modified property so it can be filtered on save

    const column = params.column.colDef.field;
    params.column.colDef.cellStyle = { 'background-color': '#e1f9e8' }; // highlight modified cells
    params.api.refreshCells({
      force: true,
      columns: [column],
      rowNodes: [params.node],
    });
  }

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

Вы можете проверить поведение на stackblitz.

Также, если у вас есть лучший способ сделать это, я открыт для новых решений.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
1 259
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я понимаю вашу проблему. Вы можете добиться того, чего хотите, вот так - вы должны использовать cellStyle в определении столбца, как показано в документах, и для этого кода ниже

cellStyle: params => {
      if (
        params.data["modifiedRow" +
                     params.node.rowIndex +"andCellKey"+ 
                     params.column.colDef.field]
      ) {
        return { backgroundColor: "#e1f9e8" };
      } else {
        return null;
      }
    },

и после этого в этой функции onDemandsCellValueChanged добавьте и измените это свойство modified как истинное и измените свою функцию, как показано ниже.

onDemandsCellValueChanged(params): void {
    if (params.oldValue === params.newValue) {
      return;
    }
    const column = params.column.colDef.field;
    params.data["modifiedRow" + params.rowIndex + "andCellKey" + column] = true;
    params.api.refreshCells({
      force: true,
      columns: [column],
      rowNodes: [params.node]
    });
  }

Теперь он должен работать даже при прокрутке. Вот полный рабочий пример на stackblitz

Спасибо за Ваш ответ! Это решило проблему прокрутки вверх и вниз. Но теперь это происходит, когда я прокручиваю вправо или влево. Вы можете проверить это поведение на своем примере stackblitz. У вас есть решение для этого?

NicuVlad 22.12.2020 08:20

Привет @NicuVlad, я обновил пример, теперь вы можете попробовать верхний рабочий пример на stackblitz, и если вы найдете этот ответ полезным, примите этот ответ.

Vishal Mittal 22.12.2020 08:35

Спасибо! Это было лучшее решение, которое я смог найти для выделения измененных ячеек. Однако он ломается при удалении строк. Есть идеи, как это исправить?

lungben 25.08.2021 11:18

Нет необходимости добавлять номер строки к измененному ключу, потому что params.data содержит только данные измененной строки. Отсутствие номера строки делает это также работающим, когда строки удаляются (в противном случае выделение разрывов из-за изменения номеров строк).

lungben 25.08.2021 12:35

Другие вопросы по теме