Ik heb een formulier met een treeview en diverse subbladen. Klik ik op een
node dan opent het desbetreffende subformulier met de juiste gegevens. Als
ik echter nieuwe gegevens wil invoeren, lukt dat prima, maar in de treeview
zie ik de aanvulling niet. Pas als ik het formulier heb gesloten en weer
open, is de treeview aangepast. Kan dit ook anders. Liefst wil ik de
gegevens direct zien verschijnen in de treeview.
Wie helpt?
Marcia
Sub Refresh()
Member of MSComctlLib.TreeView
Forces a complete repaint of a form or control.
Peter
"Marcia" <marciah...@planet.nl> wrote in message
news:ao17rl$1j1$1...@reader12.wxs.nl...
Op een of andere manier lukt jouw oplossing niet, bovendien geen reactie op
F2. Wat nu.
vr.gr.
Marcia
"Peter van den Hooff" <pe...@vandenhooff.com> schreef in bericht
news:#uXxag5bCHA.2052@tkmsftngp12...
Wanneer ik er van uit ga dat je treeview met behulp van
een recordset wordt opgebouwd zul je de gegevens opnieuw
moeten inlezen. De treeview opnieuw opbouwen
waarschijnlijk.
Goos.
If an editable field on the form that has been opened contains data that is
displayed in your TreeView control, you can use code to update the Text
property of the selected TreeView node if data changes on the form. For
example, if your TreeView control displays the Company Name field from the
Customers table, you can add code to the AfterUpdate event of the Company
Name field on the Customers form to update your TreeView node:
Forms![frmCustList]![axTreeView].SelectedItem.Text =
Forms![Customers]![Company Name]
This method is faster than clearing and refilling the entire TreeView
control when only one record has changed.
Also, if a user can change a field that you are using in the Key property of
a node in your TreeView control, you must update that Key property. You only
have to update the parent node, and the change is automatically propagated
to all child nodes:
Forms![frmCustList]![axTreeView].SelectedItem.Key =
Forms![Customers]![CustomerID]
Groet
Erik
"Goos van Beek" <goos.v...@ndcgrafischbedrijf.ln> schreef in bericht
news:147c601c26fa1$77acdb30$37ef2ecf@TKMSFTNGXA13...
Erik
"Marcia" <marciah...@planet.nl> schreef in bericht
news:ao17rl$1j1$1...@reader12.wxs.nl...
>-----Oorspronkelijk bericht-----
>.
>
Goos.
>-----Oorspronkelijk bericht-----
>.
>
Marcia
Option Compare Database
Option Explicit
Function treeview2_Fill()
Dim tvwDB As Database
Dim tvwRs As Recordset
Dim vbMsg As Integer
On Error GoTo treeview2_Fill_Err
Set tvwDB = CurrentDb()
With Me![TreeView2]
'Fill Level 1
Set tvwRs = tvwDB.OpenRecordset("SELECT * FROM [qry gebouw];",
dbOpenForwardOnly)
Do Until tvwRs.EOF
.Nodes.Add , , StrConv("Level1" & tvwRs![Gebouwnaam],
vbLowerCase), tvwRs![Gebouwnaam], 1
tvwRs.MoveNext
Loop
tvwRs.Close
'Fill Level 2
Set tvwRs = tvwDB.OpenRecordset("SELECT * FROM [qry verdieping];",
dbOpenForwardOnly)
Do Until tvwRs.EOF
.Nodes.Add StrConv("Level1" & tvwRs![Gebouwnaam], vbLowerCase),
tvwChild, StrConv("Level2" & tvwRs![verdiepingid], vbLowerCase),
tvwRs![verdieping], 2
tvwRs.MoveNext
Loop
tvwRs.Close
'Fill Level 3
Set tvwRs = tvwDB.OpenRecordset("SELECT * FROM [qry ruimtecode];",
dbOpenForwardOnly)
Do Until tvwRs.EOF
.Nodes.Add StrConv("Level2" & tvwRs![verdiepingid], vbLowerCase),
tvwChild, StrConv("Level3" & tvwRs![ruimteid], vbLowerCase),
tvwRs![ruimtecode], 3
tvwRs.MoveNext
Loop
tvwRs.Close
'Fill Level 4
Set tvwRs = tvwDB.OpenRecordset("SELECT * FROM [qry medewerkers];",
dbOpenForwardOnly)
Do Until tvwRs.EOF
.Nodes.Add StrConv("Level3" & tvwRs![ruimteid], vbLowerCase), tvwChild,
StrConv("Level4" & tvwRs![MedewerkersId], vbLowerCase), tvwRs![desknr] & " "
& tvwRs![Achternaam], 4
tvwRs.MoveNext
Loop
tvwRs.Close
End With
tvwDB.Close
treeview2_Fill_Exit:
Exit Function
treeview2_Fill_Err:
Select Case Err.Number
Case 35601 'Element not found
vbMsg = MsgBox(Error$ & "@Possible Causes: You selected a
table/query for a child level which does not correspond to a value from it's
parent level.@", vbOKOnly + vbExclamation, "Run-time Error: " & Err.Number)
Case 35602 'Key is not unique in collection
vbMsg = MsgBox(Error$ & "@Possible Causes: You selected a
non-unique field to link levels.@", vbOKOnly + vbExclamation, "Run-time
Error: " & Err.Number)
Case Else
vbMsg = MsgBox(Error$ & "@@", vbOKOnly + vbExclamation,
"Run-time Error: " & Err.Number)
End Select
Resume treeview2_Fill_Exit
End Function
Private Sub Form_Load()
Dim wzFilltreeview2 As Variant
wzFilltreeview2 = treeview2_Fill()
'============================================================
Me![txtselectedgebouw].Value = Null
Me![txtselectedverdieping].Value = Null
Me![Txtselectedruimte].Value = Null
Me![txtselectedmedewerkers].Value = Null
End Sub
Private Sub treeview2_NodeClick(ByVal Node As Object)
Dim frm As Access.Form
Set frm = Me![Sub Gebouw].Form
If Left(Node.Key, 6) = "level1" Then
Me![txtselectedgebouw].Value = Node.Key
frm.RecordSource = "sub gebouw query"
frm.Visible = True
Else
frm.Visible = False
End If
Set frm = Me![Sub verdieping].Form
If Left(Node.Key, 6) = "level2" Then
Me![txtselectedverdieping].Value = Node.Key
frm.RecordSource = "sub verdieping query"
frm.Visible = True
Else
frm.Visible = False
End If
Set frm = Me![Sub Ruimte info].Form
If Left(Node.Key, 6) = "level3" Then
Me![Txtselectedruimte].Value = Node.Key
frm.RecordSource = "sub ruimte info query"
frm.Visible = True
Else
frm.Visible = False
End If
Set frm = Me![Sub Ruimte1].Form
If Left(Node.Key, 6) = "level3" Then
Me![Txtselectedruimte].Value = Node.Key
frm.RecordSource = "sub ruimte query"
frm.Visible = True
Else
frm.Visible = False
End If
Set frm = Me![Sub Medewerker].Form
If Left(Node.Key, 6) = "level4" Then
Me![txtselectedmedewerkers].Value = Node.Key
frm.RecordSource = "sub medewerker query"
frm.Visible = True
Else
frm.Visible = False
End If
End Sub
"Goos van Beek." <goos.v...@ndcgrafischbedrijf.nl> schreef in bericht
news:00de01c26fc0$fb238c10$37ef2ecf@TKMSFTNGXA13...
Forms!formname!tvwTree.key(gstrKey).text="Text" (o.i.d)
Goos.
>-----Oorspronkelijk bericht-----
>.
>
Ik ben echt nog een leek en het begint mij dan ook te duizelen bij je
oplossing. Zou je in de codes kunnen aangeven wat je bedoelt.
Het formulier is overigens als volgt:
Treeview + txtlabels(onzichtbaar) op hoofdformulier
Diverse subformulieren, deze zijn overigens niet gebaseerd op dezelfde
tabellen/queries als de keys van de treeview.
Klik je op de node dan verschijnt de waarde in de textlabel die weer gelinkt
is aan het desbetreffende subformulier.
Ik hoop de je mij kunt helpen want volgens mij heb ik nu bijna het formulier
dat ik heel hard nodig heb.
Marcia
"Goos van Beek" <nv...@chello.ln> schreef in bericht
news:061101c26fd1$897d8d70$3bef2ecf@TKMSFTNGXA10...
Je query is gebaseerd op je txtlabels, met daarin de de key van de node, als ik me niet vergis? Je vraag was hoe je de tekst in de
geselecteerde node zou kunnen updaten nadat je de overeenkomstige waarde in een subformulier had veranderd.
Als je het veld hebt bijgewerkt (in het subformulier Sub Gebouw bv) waar de waarde instaat die ook in je tree staat zou je de
volgende code kunnen proberen
Me.Parent!TreeView2.Nodes(me.parent!txtselectedgebouw).Text=Me!Gebouwnaam
Me.parent verwijst naar het hoofdformulier; dit omdat je vanuit het subformulier werkt. TxtSelectedGebouw bevat de key van de node
die je veranderen wil; deze kun je dus gebruiken om naar je treenode te verwijzen. Het Text gedeelte van de tree node wordt
vervangen door de waarde die je in Me!Gebouwnaam hebt gewijzigd.
Is dit wat je bedoeld of heb ik het verkeerd begrepen?
Goos.
Me.Parent!TreeView2.Nodes(me.parent!txtselectedgebouw).Text=Me!Gebouwnaam
plaats je in de AfterUpdate event van Me!Gebouwnaam, en in de overeenkomstige velden van je andere subformulieren.
Goos.
Het verversen van een tree hangt in de eerste plaats af op
welke manier je hem hebt opgebouwd. Heel belangrijk
daarbij is of je alle child nodes (dat zijn de lagere
nodes in je tree) laadt bij het opstarten van je form
of...je laadt ze in het on click event van je Node.
Het eerste is doenbaar voor eenvoudige en niet te veel
omvattende data. Het tweede echter is meer aan te raden
als je over een grote hoeveelheid data beschikt. Het laden
van de tree zou, en dan vooral als je op een netwerk werkt
eindeloos duren. Maar....dat geeft dan ook weer heel wat
meer programmeerwerk. Maar....dat zou voor jou weer een
betere oplossing zijn want als je op de parent (de
bovenliggende map zeg maar) zou klikken zou je eventueel
opniew de childnodes kunnen laden met de gewijzigde
gegevens.
Ik ben bezig met een voorbeeld databank waarin ik mijn
ervaringen met treeview's heb verwerkt. Mede dank zij deze
nieuwsgroep heb ik er veel dingen in kunnen bouwen uit
ervaringen van anderen. Zodra ik ermee klaar ben geef ik
een seintje.
Walter
>-----Oorspronkelijk bericht-----
>.
>
"Goos van Beek" <goos.v...@ndcgrafischbedrijf.ln> schreef in bericht
news:00c501c26fc1$ca032450$2ae2...@phx.gbl...
Alle nodes expanderen is eenvoudig
'********************************************************
Dim intY As Integer
For intY = 1 To Me!tvwTest.Nodes.Count
Me!tvwTest.Nodes(intY).Expanded = True
Next intY
'********************************************************
Alleen de geselecteerde node zou je met het volgende
kunnen proberen. Ik heb het zelf nooit nodig gehad maar
met onderstaande code expandereert de geselecteerde node
en bij nogmaals klikken collapsed de node.
'********************************************************
On Error Resume Next
Static boolExpand As Boolean
Dim intY As Integer
For intY = Me!tvwTest.SelectedItem.Index _
To Me!tvwTest.Nodes.Count
Me!tvwTest.Nodes(intY).Expanded = _
Not boolExpand
If Me!tvwTest.Nodes(intY).Child.Index = _
(Error = False) Then Exit For
Next intY
boolExpand = Not boolExpand
'*********************************************************
Goos.
>.
>
"Goos van Beek" <goos.v...@ndcgrafischbedrijf.ln> schreef in bericht
news:13a901c27071$c3bcf070$3bef2ecf@TKMSFTNGXA10...