ПредишенСледващото

Да предположим, че има маса на отдели на университета (tblDepartment) в следния формат:
intID - strDepartmentName - intParentID
където,
intID - идентификатор единица
strDepartmentName - име единица,
intParentID - ID на родителското устройство.

корен елемент ще бъде наричан "майка" на себе си.
Също така за удобство, конструкторът на таблицата родител в областта, можете да укажете заместване, като се позовава на същата таблица:

Proit строителство достъп на секции от дърво - с дървовидна структура и VBA


искането за смяна на текста:

SELECT tblDepartment. strDepartmentName като Р на drazde L IX,

tblDepartment_1. strDepartmentName AS Dite П о л и,

ОТ tblDepartment LEFTJOIN tblDepartment AS tblDepartment_1

ON tblDepartment. intParentID = tblDepartment_1. intID

ORDERBY tblDepartment. strDepartmentName;

След това колоната родител, ние може да избере да не идентификатор, като от името на дъщерни компании (но ID все още ще бъде съхранявана в колоната).

В резултат на това, ние ще бъдем в състояние да попълни таблицата, както следва:

Proit строителство достъп на секции от дърво - с дървовидна структура и VBA


Сега ние се изгради дървото. За да направите това, да създадете празен формуляр в преглед на дизайна и изберете "ActiveX елементи":

Proit строителство достъп на секции от дърво - с дървовидна структура и VBA


В списъка изберете елемента "Microsoft TreeView контрол (6.0)"

Proit строителство достъп на секции от дърво - с дървовидна структура и VBA


Избраните елементи на формата на точното място в точното размера се добавят:

Proit строителство достъп на секции от дърво - с дървовидна структура и VBA


След това отидете на Visual Basic режима на кода и добавете следния код:

Вариант Сравни Database

За да работите с един възел, където родителите са нулеви

Вариант Сравни Database

Частни Под Form_Load ()
приглушена strRoot
strRoot = ""

Частни Под AddNode (ByVal ParentID Както стринга)
Задайте rsCommon = New ADODB.Recordset

Ако ParentID = "" Тогава
rsCommon.Open "SELECT EIA, Ðîäèòåëü, Èìÿ ОТ Req DP КЪДЕТО IsNull (Ðîäèòåëü)" "ORDER BY Èìÿ", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Направя, докато не rsCommon.EOF
TreeViewDep.Nodes.Add. Ул (rsCommon ( "ОВОС")) "$ KEY", rsCommon ( "Èìÿ")
TreeViewDep.Nodes.Item (ул (rsCommon ( "ОВОС")) "$ KEY"). Expanded = True
AddNode (ул (rsCommon ( "ОВОС")))
rsCommon.MoveNext
контур
rsCommon.Close
Задайте rsCommon = Нищо

още
rsCommon.Open "SELECT ОВОС, Ðîäèòåëü, Èìÿ ОТ Req DP КЪДЕ ОВОС <> Ðîäèòåëü И Ðîäèòåëü = " ParentID "ORDER BY Èìÿ", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Направя, докато не rsCommon.EOF
TreeViewDep.Nodes.Add ParentID "$ KEY", tvwChild, ул (rsCommon ( "ОВОС")) "$ KEY", rsCommon ( "Èìÿ")
TreeViewDep.Nodes.Item (ул (rsCommon ( "ОВОС")) "$ KEY"). Expanded = True
AddNode (ул (rsCommon ( "ОВОС")))
rsCommon.MoveNext
контур
rsCommon.Close
Задайте rsCommon = Нищо
Крайна сметка, ако

Здравейте ДОРОС трябва да попълни части от дървото. защото няколко хиляди елементи, изграждане на дървото отнема осезаем време. Сега, заредени клон, като кликнете върху елемента. Въпрос: как да получите в близост до "+" икона елемент. И това неприятно - това не е кликнал, не знам да има тази позиция дете елемент или не

Аз не съм работил с този контрол. Може пък показва всеки елемент в скоби броя на децата? Или качване, за да кликнете върху елемент най-малко едно от децата си?

Благодаря за съвета. Сега проблемът и да реши товарни дъщерните елементи. Но това не е много удобно, като се има предвид естеството на рекурсивни номерацията на елементи, които съм използвал. Исках малко по-лесно за себе си.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!