Solved

Treeviewitem and for loop

Posted on 2014-11-05
4
127 Views
Last Modified: 2014-11-07
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
0
Comment
Question by:lo_oscar
  • 2
  • 2
4 Comments
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 40425727
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

0
 

Author Comment

by:lo_oscar
ID: 40426780
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.
0
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 500 total points
ID: 40427810
I am quite sure you did not use the code as meant.

in your code you had this:
Dim oTreeNodeChild As New TreeViewItem

but it must be (before the loop):
Dim oTreeNodeChild As TreeViewItem
and inside the loop:
oTreeNodeChild =  New TreeViewItem

the issue is that if you don't create a new object, it will
0
 

Author Comment

by:lo_oscar
ID: 40428494
Thank you for the explanation. It was spot on.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

679 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question