Refresh одной строки в treedatagrid

Мы меняем значение в ячейке treedatagrid (в основании - сущность dto, ячейка - сгенерированная).
Как в таком случае отрефрешить только строчку с этой ячейкой, чтобы не репейнтить весь treedatagrid, и сохранить свернутые/развернутые пользователем узлы дерева?

Попробуйте вызвать у связанного с таблицей CollectionContainer replaceItem с обновленной сущностью.

1 симпатия

спасибо, получилось, но всё же при каждом изменении значения перерисовка (мигание) всей таблицы очень заметна, это неудобно пользователям, как можно этого избежать?

Вы имеете в виду, что что вы создаете какой-то компонент для ячейки?

Этот компонент редактируемый? Если да, то мб поставить valueSource у компонента.

Если не редактируемый, то мб при обновлении сущности менять значение в самом компоненте?

да, компонент редактируемый

в обсуждении нашла пример, как ставить valueSource:
https://forum.jmix.io/t/need-help-updating-valuesource-of-generated-components-on-a-table/3596

Но не могу найти метод getInstanceContainer() у treedatagrid. Подскажите пожалуйста, какой метод надо использовать в данном случае?

DataGrid.ColumnGeneratorEvent содержит InstanceContainer

image

1 симпатия

а, это в ColumnGeneratorEvent, поняла, спасибо)

И еще подскажите пожалуйста, при использовании valueSource, надо ли делать replaceitem? Можно ли оставить replaceitem, но при этом как-то избавиться от мигания таблицы?

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

Честно говоря - не знаю. Нужно смотреть почему это происходит. Как я понимаю replaceItem используется при сохранении в редакторе. Мб можно сделать что-то через CollectionContainer#getMutableItems - убрать и заново поставить сущность. Но я не пробовал.