Toon posts:

[VB.NET] Treeview kopellen aan datagrid

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste devvers, op een form heb ik 2 controls naast elkaar gedocked, een TreeView en een DataGrid.

code:
1
2
3
4
5
6
7
8
9
10
11
12
+--------+---------------------+
| Tview  | Dgrid               |
|        |                     |
|Hfdgrp1 | Details             |
| Sbgrp1 |                     |
| Sbgrp2 |                     |
| Sbgrp3 |                     |
|Hfdgrp2 |                     |
| Sbgrp4 |                     |
| Sbgrp5 |                     |
|        |                     |
+--------+---------------------+
De TreeView vul ik met een stukje uit een Acces Database, waarin de volgende 3 tabellen van toepassing zijn: Hoofdgroep, Subgroep en Details. Ze zijn aanelkaar gekoppeld, ze hebben dus elk een column met daarin het Id van de bovenliggende groep. So far so good.

Nu wil ik dat als iemand op zo'n subgroep klikt dat dan de datagrid ernaast alle details (dus alle rows in tblDetails die in de column SubgroepId het Id hebben van de subgroep die je in de treeview aanklikt.

Hoe ik een event maak voor het klikken, hoe je een datagrid vult en hoe ik detecteer of de node uit de treeview waarop je klikt wel een subgroep is weet ik wel maar het probleem is dat ik niet weet hoe ik moet bijhouden welke Node welk SubgroepId heeft.

Ik vul de treeview als volgt:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Private Sub fillTreeSide()
        tViewSide.Nodes.Clear()
        Dim pHoofdgroepen As DataSet
        Dim pSubgroepen As DataSet

        pHoofdgroepen = sqlGet("SELECT * FROM tblHoofdgroepen", "tmp")
        Dim pHoofdgroepenArray(pHoofdgroepen.Tables(0).Rows.Count - 1) As String
        For i As Integer = 0 To pHoofdgroepen.Tables(0).Rows.Count - 1
            pHoofdgroepenArray(i) = pHoofdgroepen.Tables(0).Rows(i)("HoofdgroepId")
            tViewSide.Nodes.Add(pHoofdgroepen.Tables(0).Rows(i)("Hoofdgroep"))
            pSubgroepen = sqlGet("SELECT * FROM tblSubgroepen WHERE HoofdgroepId = " & pHoofdgroepenArray(i), "tmp")
            Dim pSubgroepenArray(pHoofdgroepen.Tables(0).Rows.Count - 1, pSubgroepen.Tables(0).Rows.Count - 1)
            For j As Integer = 0 To pSubgroepen.Tables(0).Rows.Count - 1
                pSubgroepenArray(i, j) = pSubgroepen.Tables(0).Rows(j)("Subgroep")
                tViewSide.Nodes(i).Nodes.Add(pSubgroepenArray(i, j))
            Next
        Next

        tViewSide.ExpandAll()
        pHoofdgroepen.Dispose()
        pSubgroepen.Dispose()
    End Sub


Zoals je ziet maak ik wel een array aan voor de Id's als ik ze uit de database haal, maar die blijft gewoon in de Sub, en is niet eens buiten de for loop te gebruiken. Een oplossing die ik kan toepassen is een public string maken en daarin voor elke subgroep die ik toevoeg aan de treeview "NodeIndex|SubgroepId," toevoegen en die later met een split functie omtoveren tot een array. Maar dat is niet erg netjes, of is dat de enige oplossing?

[ Voor 6% gewijzigd door Verwijderd op 13-01-2006 11:01 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 17-04 23:42
Een TreeNode heeft een Tag property.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Sorry ben nog niet zo into VB, kende die Tag property nog niet, als ik dat geweten had zou me dat een hele hoop "getId" functies voor controls met Db inhoud elders in mijn programma gescheeld hebben :-D.

Maar in dit geval:

Als ik de tag van een node zo aanmaak:
Visual Basic:
1
2
tViewSide.Nodes(i).Nodes.Add(pSubgroepenArray(i, j))
tViewSide.Nodes(i).Tag = pSubgroepen.Tables(0).Rows(j)("SubgroepId")
En um zo:
Visual Basic:
1
tViewSide.SelectedNode.Nodes.Item(0).Tag
of zo:
Visual Basic:
1
tViewSide.SelectedNode.Tag
Krijg ik bij het eerste methode van uitlezen helemaal geen resultaat, bij de tweede methode krijgen mijn hoofdgroep nodes in hun tag het Id van de laatste subgroep van die hoofdgroep :? Nu kan ik me voorstellen dat dat komt omdat de subgroepen ook "subnodes" zijn (weet niet hoe je dat noemt) maar dan zou ik toch antwoord moeten krijgen met de eerste methode?

[ Voor 5% gewijzigd door Verwijderd op 13-01-2006 11:48 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 17-04 23:42
Eh, gebruik ff de debugger, en kijk eens wat je gedaan hebt.

Je Add een (sub)node, aan Node(i). Je zet de tag property van Node(i). Je moet dan ook niet verwachten dat je een waarde krijgt uit de Tag property van een Node waarvoor je de Tag property niet gezet hebt.

https://fgheysels.github.io/