Подскажите, пожалуйста как можно реализовать поиск в закрытых узлах дерева и установку записи как текущей?
Ситуация такая:
на форме 3 грида: "работы" "материалы" "смета", гриды "работы" и "материалы" отображают записи соответствующих DataSource, в которые записи попадают из memtable - ов. В memtable записи попадают с помощью метода LoadFromDataSet из датасетов.
В гридах "работы" "материалы" отображаются справочники в виде дерева. Однако в справочнике "работы" при его заполнении можно указать связанные с работой материалы. (данные записываются в базе данных в отдельную таблицу, для простоты объяснения назовем её "связи").
При двойном клике на работе в гриде "работы" полю IsSelected выбранной строки присваивается значение 1, происходит заполнение IBQuery (который тоже находится на форме и служит для выбора из БД, из таблицы "связи" материалов связанных с этой работой, если они были заданны при формировании справочника "работы").
Дальше идет перебор в цикле записей выбранных в IBQuery, поиск материала в memtable отвечающем за вывод в грид "материалы". установка записи, с искомым материалом, как текущей и изменение у этого материала значения поля IsSelected на 1.
В итоге мемтейбл грида "смета" добавляются записи из мемтейблов "работы" и "материалы" со значением = 1.
Все замечательно работает, если в инспекторе объектов memtable в свойстве TreeList -> DefaultNodeExpanded выставить значение true. Тогда дерево раскрыто и всё работает. Но заказчик сказал, что дерево при открытии должно быть свёрнуто. А вот в свёрнутом дереве у меня не получается сделать поиск материала и установить запись, как текущую, чтоб изменить значение поля IsSelected.
При раскрытом дереве мне достаточно было сделать вот такой поиск:
Код:
mmTable.Locate('RECID', qQuery.FieldByName('REF_RECID').AsInteger, []);
и запись устанавливалась как текущая, нужное мне поле записи я мог изменить.
А сейчас, как сделать поиск в закрытом дереве и установить запись, как текущую?