Uporabniško urejanje drevesa
Uporabnikom omogočite, da vozlišča preimenujejo, dodajajo, brišejo, premikajo in kopirajo, vi pa vsako spremembo preverite, preden se zapiše v vir podatkov.
Zahteva WKL Forms Object Library 1.23 ali novejšo različico.
Pregled rešitve
Operacije vklopijo štiri lastnosti: LabelEdit (preimenovanje), AllowAdditions (dodajanje), AllowDeletions
(brisanje) in AllowDragDrop (premikanje in kopiranje). Vse so privzeto izklopljene, ker spreminjajo podatke. Z
AutoSave = True (privzeto) se vsaka operacija zapiše v eni transakciji; BeforeUpdate se sproži pred vsakim
zapisom in lahko prekliče celotno operacijo.
Izvedba
V listu z lastnostmi (zavihek Drugo) ali v Form_Load:
With Me!Tree1.Object
.LabelEdit = True ' F2 or click on the selected node
.AllowAdditions = True ' Insert: same level; Ctrl+Insert: below
.AllowDeletions = True ' Delete, with confirmation
.AllowDragDrop = True ' drag to move, Ctrl+drag to copy; Ctrl+X/C/V, Alt+Arrow keys
End With
Spremembe preverite v modulu obrazca:
Private Sub Tree1_BeforeUpdate(ByVal Key As Variant, ByVal Action As WklUpdateAction, Cancel As Integer)
If Action = wuaDelete And Not CurrentUserMayDelete() Then Cancel = True ' rolls back the whole operation
End Sub
Private Sub Tree1_AfterLabelEdit(ByVal Key As Variant, NewText As String, Cancel As Integer)
NewText = Trim$(NewText)
If Len(NewText) = 0 Then Cancel = True
End Sub
Private Sub Tree1_BeforeNodeAdd(ByVal ParentKey As Variant, NewKey As Variant, Text As String, Cancel As Integer)
Text = "Nova regija"
End Sub
CurrentUserMayDelete nadomešča vaše lastno preverjanje dovoljenj.
Opombe
- Priročni meni ponudi vsako operacijo samo, če jo dovoljuje njena lastnost.
- Brisanje odstrani poddrevo;
BeforeDeletelahko izpusti vprašanje za potrditev (Confirm = False) ali prekliče brisanje. - Novi ključi: samoštevilo dodeli Access. Za druga ključna polja kontrolnik predlaga ključ, ki ga lahko spremenita
BeforeNodeAddinBeforeNodeCopy: števila se nadaljujejo za najvišjim ključem, besedilni ključi dobijo pripono v jeziku uporabniškega vmesnika (A1-kopija,A1-kopija2…), ključi GUID pa nov GUID. - Kopiranje ne kopira polj prilog in polj z več vrednostmi.
- Vlečenje deluje samo znotraj istega kontrolnika.
- V drevesu, naloženem iz nabora zapisov (
Recordset) ali datoteke, spremembe vplivajo le na prikaz.