Delphi.DBTreeView. Алгоритм динамического обновления узлов

Пусть есть TreeView, связанное с базой данных, например MySQL. Необходимо сделать так, чтобы данные загружались только при первоначальном заполнении (idParent=-1) либо при раскрытии узла (OnExpanding).

Данный алгоритм хорош тем, что не грузит сразу все данные. И если, скажем, дерево большое, содержит много узлов, загрузка которых может занять некоторое время, то он будет очень эффективен в данном случае.

Итак, человеческими словами

Алгоритм

-собрать ID и имена всех детей для определенного родителя

-очистить узел от указателей и детей

-загрузить данные в узел, добавляя в свойство Node.Data ссылку на ID узла в базе. Для большинства задач этого достаточно, если нужно больше данных, можно использовать ссылку на запись или экземпляр класса, если уж все будет совсем масштабно.

-при загрузке проверять, если у какого-то ребенка есть еще дети, добавлять “призрачный” узел, чтобы у TreeView появлялся “плюсик”, при нажатии на который можно производить очередной Expanding

Полный код модуля из проекта

 

This entry was posted in Delphi, Алгоритмы. Bookmark the permalink.