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:
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ă:
Acum construim un copac. Pentru aceasta, creați un formular gol în modul de proiectare și selectați elementul "Controale ActiveX":
În listă, selectați elementul "Controlul Microsoft TreeView (6.0)"
Elementul selectat este adăugat la formularul în locul potrivit al dimensiunii dorite:
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ă.