Solved

Treeviewitem and for loop

Posted on 2014-11-05
4
131 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

Independent Software Vendors: 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

Suggested Solutions

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.
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

732 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