Accesați proit construirea unui arbore de partiție - treeview și vba

Să presupunem că există un tabel de unități ale universității (tblDepartment) în formatul:
intID - strDepartmentName - intParentID
în cazul în care,
intID este ID-ul unității,
strDepartmentName - numele unității,
intParentID este identificatorul unității părinte.

Elementul rădăcină se va referi la el însuși ca "părinte".
De asemenea, pentru comoditate, în proiectantul mesei, puteți specifica o substituire în câmpul părinte, referindu-se la același tabel:

Accesați proit construirea unui arbore de partiție - treeview și vba


Solicitați un text pentru înlocuire:

SELECT tblDepartment. strDepartmentName Secțiunea AS,

tblDepartment_1. strDepartmentName AS Un susținător,

FROM tblDepartment LEFTJOIN tblDepartment AS tblDepartment_1

ON tblDepartment. intParentID = tblDepartment_1. intID

ORDERBY tblDepartment. strDepartmentName;

După aceea, în coloana părinte, nu putem selecta identificatorul, ci numele unității (dar coloana va păstra în continuare identificatorul).

În consecință, vom putea completa tabelul după cum urmează:

Accesați proit construirea unui arbore de partiție - treeview și vba


Acum construim un copac. Pentru aceasta, creați un formular gol în modul de proiectare și selectați elementul "Controale ActiveX":

Accesați proit construirea unui arbore de partiție - treeview și vba


În listă, selectați elementul "Controlul Microsoft TreeView (6.0)"

Accesați proit construirea unui arbore de partiție - treeview și vba


Elementul selectat este adăugat la formularul în locul potrivit al dimensiunii dorite:

Accesați proit construirea unui arbore de partiție - treeview și vba


Apoi, mergeți la modul de cod Visual Basic și adăugați următorul cod:

Opțiunea Comparați baza de date

Pentru a lucra cu nodul, unde părinții sunt nulați

Opțiunea Comparați baza de date

Private Sub Form_Load ()
Dim strRoot
strRoot = ""

Private Sub AddNode (ByVal ParentID ca șir)
Setați rsCommon = Noul ADODB.Recordset

Dacă ParentID = "" Apoi
rsCommon.Open "SELECT Cale, Feeder, FROM FROM REQ DP Unde IsNull (Feeder)" "ORDER BY Èìÿ", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

În timp ce nu rsCommon.EOF
TreeViewDep.Nodes.Add. Str (rsCommon ("Êîä")) "$ KEY", rsCommon ("Èìÿ")
TreeViewDep.Nodes.Item (Str (rsCommon ("Êîä")) "$ KEY") Expanded = Adevărat
AddNode (Str (rsCommon ("Êîä"))))
rsCommon.MoveNext
buclă
rsCommon.Close
Setați rsCommon = Nimic

altfel
rsCommon.Open "SELECT Nod, Alimentator, FROM FROM REQ DP WHERE <> DEMONTAREA MĂRFURILOR ȘI MOBILELOR = " ParentID "ORDER BY Èìÿ", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

În timp ce nu rsCommon.EOF
TreeViewDep.Nodes.Add ParentID "$ KEY", tvwChild, Str (rsCommon ("Êîä")) "$ KEY", rsCommon ("Èìÿ")
TreeViewDep.Nodes.Item (Str (rsCommon ("Êîä")) "$ KEY") Expanded = Adevărat
AddNode (Str (rsCommon ("Êîä"))))
rsCommon.MoveNext
buclă
rsCommon.Close
Setați rsCommon = Nimic
Sfârșit Dacă

Alo Dawros înainte de a umple copacul în părți. pentru că elemente de câteva mii, construcția copacului durează o perioadă considerabilă de timp. Acum încarc ramura făcând clic pe element. Întrebare: cum să afișați pictograma "+" lângă element. Și este ciudat - până când faceți clic pe, nu știu dacă acest element are elemente copil sau nu

De mult timp nu a funcționat cu acest control. Poate ca o opțiune de ieșire fiecare element în paranteze numărul de copii? Sau să încărcați până la un clic pe un element cel puțin unul dintre elementele sale copil?

Vă mulțumim pentru sfat. Acum am rezolvat această problemă încărcând elementele copilului. Dar acest lucru nu este cu totul convenabil, având în vedere caracterul recursiv al numerotării elementelor pe care le folosesc. Am vrut să-mi fac viața puțin mai ușoară.

Articole similare