Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Treeviewitem and for loop

Posted on 2014-11-05
4
Medium Priority
?
141 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 2000 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

Restore individual SQL databases with ease

Veeam Explorer for Microsoft SQL Server delivers an easy-to-use, wizard-driven interface for restoring your databases from a backup. No expert SQL background required. Web interface provides a complete view of all available SQL databases to simplify the recovery of lost database

Question has a verified solution.

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

Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
As many of you are aware about Scanpst.exe utility which is owned by Microsoft itself to repair inaccessible or damaged PST files, but the question is do you really think Scanpst.exe is capable to repair all sorts of PST related corruption issues?
Suggested Courses
Course of the Month13 days, 13 hours left to enroll

580 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