Maciej Los
Пожалуйста, сначала прочтите мой комментарий к этому вопросу.
Что ж, документация MSDN полна примеров:
Как привязать TreeView для сведения, что есть неопределяемые глубина[^]
Пошаговое руководство: отображение иерархических данных в элементе управления TreeView[^]
Как использовать TreeView для отображения иерархических данных[^]
Пожалуйста, перейдите по ссылкам, чтобы узнать, как вставить узлы в TreeView из иерархических данных с помощью кода C#.
Что касается CTE... Вы можете использовать CTE (рекурсивный запрос) для определения уровня глубины узла, но ваши данные должны быть исправлены. Пожалуйста, изучите приведенный ниже пример:
DECLARE @tmp TABLE([prod code] NVARCHAR(255), [comp code] NVARCHAR(255))
INSERT INTO @tmp ([prod code], [comp code])
VALUES('Root', NULL),
('Root', '21223'),
('21223', 'part1'),
('21223', 'part2'),
('part2', 'subpart'),
('part2', 'subpart2'),
('subpart', 'lowerlevel')
;WITH CTE AS
(
SELECT 1 AS NodeLevel, [prod code] AS NodeName
FROM @tmp
WHERE [comp code] IS NULL
UNION ALL
SELECT t1.NodeLevel + 1 AS NodeLevel, t2.[comp code] AS NodeName
FROM CTE AS t1 INNER JOIN @tmp AS t2 ON t1.NodeName = t2.[prod code]
WHERE t2.[comp code] IS NOT NULL
)
SELECT *
FROM CTE
Результат:
NodeLevel NodeName
1 Root
2 21223
3 part1
3 part2
4 subpart
4 subpart2
5 lowerlevel
Для получения дополнительной информации о CTE, пожалуйста, смотрите:
Рекурсивные Запросы, Использующие Обобщенные Табличные Выражения[
^]
SQL SERVER-введение в иерархический запрос с использованием рекурсивного CTE-A Primer - Journey to SQL Authority with Pinal Dave[
^]
Рекурсивный запрос CTE для иерархии данных(родительская дочерняя иерархия)[
^]
Стратегия Depth First с иерархическими данными с использованием CTE ( Common Table Expression) - SQL Server | The SQL Ideas[
^]
Попробуй!