Формирую дерево изделий для отображения конструкторской спецификации. В дереве отображаются КОИ (конструкторские обозначения изделий) в виде сборок, подсборок, деталей. Дерево вывести не проблема. Для этого формирую в MS SQL 2005 таблицу Koi с полями:
ID_Koi (int) - первичный ключ;
ID_Parent (int) – внешний ключ;
Koi – наименование КОИ.
Заполним таблицу начальными данными:
-----------------------------------------------------------------
ID_Koi | ID_Parent | Koi
-----------------------------------------------------------------
1 | NULL | КОИ1
-----------------------------------------------------------------
2 | 1 | КОИ2
-----------------------------------------------------------------
3 | 2 | КОИ3
-----------------------------------------------------------------
4 | 3 | КОИ4
-----------------------------------------------------------------
5 | 3 | КОИ5
-----------------------------------------------------------------
6 | NULL | КОИ6
-----------------------------------------------------------------
7 | 6 | КОИ7
-----------------------------------------------------------------
Формируем дерево в TreeView приложения
+--КОИ1
+--КОИ2
+КОИ3
--КОИ4
--КОИ5
+--КОИ6
--КОИ7
Весь гемор возникает при отслеживании добавления (редактирования, удаления) изделий, подсборок. Так, например, при добавлении в изделие КОИ7 подсборки КОИ2, изделие КОИ7 само становится подсборкой, которое включает не только КОИ2, но и КОИ3, КОИ4 и КОИ5, т.к. КОИ2 – это подсборка, которая включает подсборку КОИ3 и изделия КОИ4 и КОИ5. Этого требует логика поставленной задачи (каждое изделие, подсборка и сборка в дереве изделий меняется один раз, в одном месте, в остальных – должно меняться самостоятельно).
В данном случае в таблицу должны добавиться записи:
-----------------------------------------------------------------
ID_Koi | ID_Parent | Koi
-----------------------------------------------------------------
8 | 6 | КОИ2
-----------------------------------------------------------------
9 | 8 | КОИ3
-----------------------------------------------------------------
10 | 9 | КОИ4
-----------------------------------------------------------------
11 | 9 | КОИ5
-----------------------------------------------------------------
вместо:
-----------------------------------------------------------------
ID_Koi | ID_Parent | Koi
-----------------------------------------------------------------
8 | 6 | КОИ2
-----------------------------------------------------------------
Получим новое дерево в TreeView приложения
+--КОИ1
+--КОИ2
+КОИ3
--КОИ4
--КОИ5
+--КОИ6
+--КОИ7
+--КОИ2
+КОИ3
--КОИ4
--КОИ5
Так же обстоит дело с редактированием подсборок и деталей. Например, при изменении названия КОИ 2 на КОИ8, должны измениться уже 2-е записи (одна в подсборке КОИ1, другая в подсборке КОИ7).
Тоже должно происходить и с удалением – удаляем изделие(сборку, подсборку) в одном месте дерева, а изделие (сборка, подсборка) должна удалиться во всех местах дерева.
Как реализовать такую логику в дереве изделий?
![blackeye :eye:](./images/smilies/icon_blackeye.gif)