Advice with treeview...

lidds

Junior Contributor
Joined
Nov 9, 2004
Messages
210
I need some advice and guidance on how I should tackle this problem.

I have a treeview 'treeview1' that I want to list all the files that are stored within my database table 'docListTbl'. The problem is that these files might be stored within different treenodes, and I'm not sure how to build the treeview dynamically from my database table and to ensure that the files are displayed under the correct node.

What I will do is give you and example, but I am unsure how to acheive this, can anyone help???

If I have the following table stucture:

parent | child | file name
-----------------------
text files | new | filename
picture files | old | filename
text files | new1 | filename1
text files | new | filename2

so what I want it to give me is the following:

Code:
-- text files --
  |            |-- new --
  |            |         |-- filename
  |            |         |-- filename2
  |            |
  |            |-- new1--
  |                      |-- filename1
-- picture files --
                   |-- old --
                             |-- filename


If anyone could help give me an example code in vb.net that would be great??

Thanks

Simon
 
When you get the data from the table, ensure that you sort by parent, child, filename. Try the following:

Code:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim dt As New DataTable
        Dim iLp As Integer
        Dim parent As TreeNode
        Dim child As TreeNode
        Dim filename As TreeNode

        'da is a DataAdapter for the table
        da.Fill(dt)

        For iLp = 0 To dt.Rows.Count - 1

            parent = FindParent(dt.Rows(iLp).Item(0))

            If parent Is Nothing Then

                parent = TreeView1.Nodes.Add(dt.Rows(iLp).Item(0))

            End If

            child = FindChild(parent, dt.Rows(iLp).Item(1))

            If child Is Nothing Then
                child = parent.Nodes.Add(dt.Rows(iLp).Item(1))
            End If

            filename = FindChild(child, dt.Rows(iLp).Item(2))

            If filename Is Nothing Then
                filename = child.Nodes.Add(dt.Rows(iLp).Item(2))
            End If
        Next iLp

    End Sub

    Private Function FindParent(ByVal treeText As String) As TreeNode

        Dim node As TreeNode

        For Each node In TreeView1.Nodes
            If node.Text = treeText Then Return node
        Next node

        Return Nothing

    End Function

    Private Function FindChild(ByRef node As TreeNode, ByVal treeText As String) As TreeNode

        Dim child As TreeNode

        For Each child In node.Nodes
            If child.Text = treeText Then Return child
        Next child

        Return Nothing

    End Function
 
Back
Top