Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Treeview en bijwerken gegevens

0 views
Skip to first unread message

Marcia

unread,
Oct 9, 2002, 8:36:03 AM10/9/02
to
Hallo,

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


Peter van den Hooff

unread,
Oct 9, 2002, 9:32:35 AM10/9/02
to
Marcia,
Heb je al de methode refresh geprobeerd? Volgens F2:

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...

Marcia

unread,
Oct 9, 2002, 10:18:48 AM10/9/02
to
Hallo Peter,

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...

Goos van Beek

unread,
Oct 9, 2002, 10:38:00 AM10/9/02
to

>-----Oorspronkelijk bericht-----
Hallo Marcia.

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.

Lownotes

unread,
Oct 9, 2002, 1:55:01 PM10/9/02
to
Sorry voor het engels, maar dit staat in de Microsoft KnowledgeBase:

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...

Lownotes

unread,
Oct 9, 2002, 1:56:40 PM10/9/02
to
Kan iemand mij helpen met de code voor het expanderen van Nodes?

Erik

"Marcia" <marciah...@planet.nl> schreef in bericht
news:ao17rl$1j1$1...@reader12.wxs.nl...

Goos van Beek.

unread,
Oct 9, 2002, 2:23:35 PM10/9/02
to
Het klopt natuurlijk precies, maar wanneer er nodes
bijkomen gaat het niet op...

>-----Oorspronkelijk bericht-----

>.
>

Goos van Beek

unread,
Oct 9, 2002, 2:29:22 PM10/9/02
to

Hoe wil je precies expanderen? Alles? Of wil je een
bepaalde node laten zien?

Goos.
>-----Oorspronkelijk bericht-----

>.
>

Marcia

unread,
Oct 9, 2002, 3:23:40 PM10/9/02
to
Omdat het mij niet lukte om het subformulier te laten openen bij het klikken
op de node heb ik een omweg gemaakt. Misschien dat hier een deel van het
probleem van refreshen zit.
Bijkomstig ander probleem is dat ik het hoofdformulier weer als subformulier
wil opnemen. Dat lukt niet omdat hij dan de sub sub formulieren niet kent.
Ik heb de codes bijgevoegd. Misschien dat jullie eens kunnen kijken, want ik
ben nog niet helemaal bekend met access en vba. Alvast bedankt.

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...

Goos van Beek

unread,
Oct 9, 2002, 4:22:06 PM10/9/02
to
Als ik me niet vergis wil je dat de tekst van de tree node
aangepast wordt wanneer je het overeenkomstige veld in het
desbetreffende formulier (tabel) verandert. Misschien zou
je de key van de desbetreffende node in een globale
variabele kunnen opslaan. Deze kun je dan gebruiken om in
de After Update event van je subformulier de tree node te
updaten, zonder dat je de tree opnieuw hoeft te laden.

Forms!formname!tvwTree.key(gstrKey).text="Text" (o.i.d)

Goos.


>-----Oorspronkelijk bericht-----

>.
>

Marcia

unread,
Oct 9, 2002, 5:02:17 PM10/9/02
to
Hallo Goos,

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...

Goos van Beek

unread,
Oct 9, 2002, 5:46:54 PM10/9/02
to
Hallo Marcia.

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.

Goos van Beek

unread,
Oct 10, 2002, 3:11:51 AM10/10/02
to
De code

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.

walter janssens

unread,
Oct 10, 2002, 3:13:20 AM10/10/02
to
Hoi,
Ik heb de antwoorden zo eens doorgelezen en kan er het
volgende aan toe voegen:

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-----

>.
>

Lownotes

unread,
Oct 10, 2002, 10:15:37 AM10/10/02
to
Het liefst vanaf de gekozen Node alles naar beneden, maar alles is ook
handig


"Goos van Beek" <goos.v...@ndcgrafischbedrijf.ln> schreef in bericht

news:00c501c26fc1$ca032450$2ae2...@phx.gbl...

Goos van Beek

unread,
Oct 10, 2002, 11:29:03 AM10/10/02
to
Hallo Erik.

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.

>.
>

Lownotes

unread,
Oct 11, 2002, 5:40:43 AM10/11/02
to
Bedankt!


"Goos van Beek" <goos.v...@ndcgrafischbedrijf.ln> schreef in bericht

news:13a901c27071$c3bcf070$3bef2ecf@TKMSFTNGXA10...

0 new messages