У меня есть редактируемая сетка ALV, управляемая через CL_GUI_ALV_GRID
. Я определил цвет фона ячейки в таблице цветов каждой строки, и этот цвет отображается правильно. Теперь я хотел бы обновить цвет ячейки во время обработки события data_changed
(повернуть ячейку с красного на зеленый, если измененные данные действительны). Однако цвет фона не меняется.
Я попробовал эти 3 решения в методе, обрабатывающем событие data_changed
:
er_data_changed->modify_cell
и передача ему измененной таблицы цветов.er_data_changed->mp_mod_rows->
.Ничего из этого не сработало.
Есть метод er_data_changed->modify_style
, но нет метода er_data_changed->modify_color
.
Спасибо.
Спасибо, вызов метода обновления после изменения внутренней таблицы ALV сработал. Пожалуйста, оставьте свой комментарий в качестве ответа, чтобы я мог закрыть вопрос.
Класс ALV должен иметь метод REFRESH (или какое-то похожее имя метода, например, по CL_GUI_ALV_GRID это метод REFRESH_TABLE_DISPLAY). Этот метод также необходимо вызвать, чтобы обновить выходные данные ALV.
Я знаю, что вызов метода refresh_table_display
в событии handle_data_changed
работает и является наиболее простым решением. Но я хочу вас предупредить: это может привести к поломке многих вещей, поэтому вам следует избегать этого, если это возможно.
Например (наиболее заметный побочный эффект): он очищает поля, имеющие протокол ошибок. Это связано с тем, что поля с протоколом ошибки не отправляются в таблицу, которую обновление использует для установки новых данных.
Если вам нужно обновление здесь, всегда лучше вызвать обновление в handle_data_changed_finished. событие, когда установлен E_MODIFIED. Таким образом, вы обновляетесь только тогда, когда нет ошибок, которые в противном случае вы бы перезаписали.
Таким образом, вы можете использовать метод modify_cell
в handle_data_changed
в поле таблицы цветов и обновить handle_data_changed_finished
.
У меня возникла проблема, которую вы описываете, спасибо, я проверю ваше решение.
Существует метод обновления ALV, не следует ли его также вызвать? Было бы здорово, если бы вы разместили свой код, т.е. е. воспроизводимый пример.