Мы меняем значение в ячейке treedatagrid (в основании - сущность dto, ячейка - сгенерированная).
Как в таком случае отрефрешить только строчку с этой ячейкой, чтобы не репейнтить весь treedatagrid, и сохранить свернутые/развернутые пользователем узлы дерева?
Попробуйте вызвать у связанного с таблицей CollectionContainer
replaceItem
с обновленной сущностью.
спасибо, получилось, но всё же при каждом изменении значения перерисовка (мигание) всей таблицы очень заметна, это неудобно пользователям, как можно этого избежать?
Вы имеете в виду, что что вы создаете какой-то компонент для ячейки?
Этот компонент редактируемый? Если да, то мб поставить valueSource у компонента.
Если не редактируемый, то мб при обновлении сущности менять значение в самом компоненте?
да, компонент редактируемый
в обсуждении нашла пример, как ставить valueSource:
https://forum.jmix.io/t/need-help-updating-valuesource-of-generated-components-on-a-table/3596
Но не могу найти метод getInstanceContainer() у treedatagrid. Подскажите пожалуйста, какой метод надо использовать в данном случае?
DataGrid.ColumnGeneratorEvent
содержит InstanceContainer
а, это в ColumnGeneratorEvent, поняла, спасибо)
И еще подскажите пожалуйста, при использовании valueSource, надо ли делать replaceitem? Можно ли оставить replaceitem, но при этом как-то избавиться от мигания таблицы?
с valueSource
replaceitem
не нужен. Когда вы будете обновлять значение сущности, оно должно будет обновится в компоненте с valueSource
(при условии что будет вызов сеттера для поля).
Честно говоря - не знаю. Нужно смотреть почему это происходит. Как я понимаю replaceItem
используется при сохранении в редакторе. Мб можно сделать что-то через CollectionContainer#getMutableItems
- убрать и заново поставить сущность. Но я не пробовал.