Тема: Delphi
Показать сообщение отдельно
Старый 10.06.2006, 00:38   #2
COBEHOK
Новичок
 
Регистрация: 17.08.2004
Сообщений: 780
По умолчанию

1. В поле "Parent" корневых узлов помещаешь 0.
2. При создании формы делаешь "select * from tree where (parent=0)" и заполняешь ими дерево. В поле lParam каждого узла (смотри структуру TVITEM) помещаешь значение ID. В поле nChildren помещаешь 1
3. При попытки разворачивания ветки (событие TVN_ITEMEXPANDING) проверяешь флаг TVS_EXPANDEDONCE узла. Если он установлен, значит узел уже разворачивался и вся информация в него записана, если нет, то пункт 4.
4. получаешь значение ID и делаешь запрос "select * from tree where (parent=id)". Если кол-во записей больше нуля вставляешь их в дерево как в пункте 1. Если ноль, то делаешь SetItem(tvitem) для узла дерева поместив в в поле nChildren 0 (плюсик напротив ветки должен исчезнуть)

Общий алгоритм примерно такой. Из плюсов - не нужно при запуске перелопачивать всю таблицу. Она будет читатся кусками по мере необходимости. Нужно только проиндексировать поле "parent".
И имена поле с пробелами лучше не делать. В крайнем случае назови ID_class

Последний раз редактировалось COBEHOK; 10.06.2006 в 10:22.
COBEHOK вне форума   Ответить с цитированием