Link to home
Start Free TrialLog in
Avatar of lo_oscar
lo_oscar

asked on

Treeviewitem and for loop

I have a legacy code I'm maintaining that uses a for loop to bind data rows from a dataset into a tree view for wpf. A request came in to add a root node to the existing 2 level tree view. I'm not familiar on how to assign child nodes in treeview control and a few attempts so far has been unsuccessful.  

For Each iRow In iDataSet.Tables("Table1").Rows
                If iRow("TABNAME") <> PreviousTab Then
                    Dim oTreeNodeTabName As New TreeViewItem
                    oTreeNodeTabName.Header = iRow("TABNAME")
                    oTreeNodeTabName.Tag = Nothing
                                        
                    _TreeView.Items.Add(oTreeNodeTabName)
                End If

                If iRow("TYPEDESC") <> PreviousDesc Then
                    Dim oTreeNodeHeader As New TreeViewItem
                    oTreeNodeHeader.Header = iRow("TYPEDESC")
                    oTreeNodeHeader.Tag = Nothing
                    count += 1                    
                    _TreeView.items.Add(oTreeNodeHeader)
                End If

                Dim oTreeNode As New TreeViewItem
                oTreeNode.Header = iRow("EVENTDATE") & "   " & iRow("TYPEDESC")
                oTreeNode.Tag = iRow("VIEWPARMS")
                                
                Dim tvItem As TreeViewItem = _TreeView.Items(count)
                tvItem.Items.Add(oTreeNode)

Open in new window


The data in the table should look like below:

TABNAME     TYPEDESC     EVENTDATE     VIEWPARMS
A                     ABC                MM/DD/YYYY  1234567
A                     ABC                MM/DD/YYYY  2164546
A                     DEF                MM/DD/YYYY  1546546
B                     GHI                MM/DD/YYYY  6548484

I want to use for loop to add a root node for TABNAME so the treeview will have 3 tiers instead of 2:

TABNAME
       |_       TYPEDESC
                          |_    EVENTDATE TYPEDESC
Avatar of Guy Hengel [angelIII / a3]
Guy Hengel [angelIII / a3]
Flag of Luxembourg image

it should look like this, assuming the data comes in ordered by tabname and typedes:

string PreviousTab = string.Empty
string PreviousType = string.Empty

Dim oTreeNodeTab As TreeViewItem
Dim oTreeNodeType As TreeViewItem
Dim oTreeNodeChild As TreeViewItem

For Each iRow In iDataSet.Tables("Table1").Rows
       If iRow("TABNAME") <> PreviousTab Then
                oTreeNodeTab = new  TreeViewItem()
                    oTreeNodeTab .Header = iRow("TABNAME")
                    oTreeNodeTab .Tag = Nothing
                                       
                    _TreeView.Items.Add(oTreeNodeTab )
                   PreviousTab=  iRow("TABNAME")
                End If

                If iRow("TYPEDESC") <> PreviousDesc Then
                    oTreeNodeType  = New TreeViewItem
                    oTreeNodeType .Header = iRow("TYPEDESC")
                    oTreeNodeType .Tag = Nothing
                    _oTreeNodeTab .items.Add(oTreeNodeType )
                   PreviousDesc =  iRow("TYPEDESC")
                End If

                oTreeNodeChild =  New TreeViewItem
                oTreeNodeChild .Header = iRow("EVENTDATE") & "   " & iRow("TYPEDESC")
                oTreeNodeChild .Tag = iRow("VIEWPARMS")
                                
                oTreeNodeType .Items.Add(oTreeNodeChild )
end for                                  

Open in new window

Avatar of lo_oscar
lo_oscar

ASKER

Thanks. I have try this too but are getting an error

"Element already has a logical parent. It must be detached from the old parent before it is attached to the new one."

This happens when the second oTreeNodeChild is added while I run debug.
ASKER CERTIFIED SOLUTION
Avatar of Guy Hengel [angelIII / a3]
Guy Hengel [angelIII / a3]
Flag of Luxembourg image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Thank you for the explanation. It was spot on.