ввиду, когда у любой записи есть свой родитель. Родитель имеет несколько дочерей. Каждая такая запись имеет несколько полей, помимо id и parent (тип полей Integer). Первое, что я сделал это было 2 таблицы. Родительская и дочерняя. Тут все достаточно просто и легко: прописал MasterSource, MasterField и IndexField. Все заработало на автомате. Но потом потребовалось реализовать несколько или даже неограниченное число вложенностей. Первое, что приходит на ум это вместо организации Master Detail таблиц просто выполнить фильтрацию по полю родитель при соответствующем клике. Есть ли другие идеи для реализации?
Просто я непосредственно с дизайном БД не так часто сталкивался. Поэтому может что-то упускаю из виду. Поэтому попросил еще идеи
Под фильтрацией имел ввиду типа SELECT * FROM TB_RECORDS WHERE parent = :parent
Ну одна таблица с такой структурой обеспечит дерево. ID | ParentID | Value
В плане дизайна компонент как все настроить. Я это имел ввиду
Стандартные даже не знаю, поддерживают ли такое. Я использовал TVirtualStringTree. При старте делал выборку корневых элементов а по мере раскрытия подгружал.
Хотелось готовое. Обвязку под DB решил не замарачиваться
это отложенный фетч, у любого гуевого дерева (у ноды) есть свойство HaseChild, если его выставить в True то будет рисоваться плюсик без фактического заполнения списка чайлдов, а когда уже щелкаем по плюсу на экспандинге фетчим реальные чайлды в узел (типа ленивая загрузка). У нас так-же сделано
Да, там только надо лишнее действие сделать, чтоб понять есть ли дети, чтоб плюсик нарисовать.
да, выборку до первого чайлда
Тут vtv напрашивается сам. По поводу селектов - вот статья с разумным мыслями, может пригодится http://www.ibase.ru/treedb/
https://t.me/Delphi_Lazarus/103498 например
Спасибо. Гляну тоже
Была компонента что то типа dbvirtualtreeview
Обсуждают сегодня