﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>StrataFrame Forum » StrataFrame Application Framework - V1 » WinForms (How do I?)  » Hierarchal data and tree views</title><generator>InstantForum 2017-1 Final</generator><description>StrataFrame Forum</description><link>http://forum.strataframe.net/</link><webMaster>StrataFrame Forum</webMaster><lastBuildDate>Tue, 09 Jun 2026 09:37:59 GMT</lastBuildDate><ttl>20</ttl><item><title>Hierarchal data and tree views</title><link>http://forum.strataframe.net/FindPost3990.aspx</link><description>I'm not sure if this is the best place for this question or in the BusinessObjects section...&lt;br&gt;
&lt;br&gt;
I have several hierarchal data structures and would like to present them in a tree view.  Some of these structures are from within a single table and some span multiple tables.  I looking for any suggestions, guidelines on the best way to do this.  I'm assuming that in any case I'm likely going to be getting a DataTable from a BO and manually building the tree, but maybe there is a better way.&lt;br&gt;
&lt;br&gt;
So, the two types of hierarchies are:&lt;br&gt;
&lt;br&gt;
1. parent child within a single table&lt;br&gt;
2. parent child within a single table and with children within another table&lt;br&gt;
&lt;br&gt;
So, how best to implement this sort of thing?</description><pubDate>Mon, 30 Oct 2006 14:52:41 GMT</pubDate><dc:creator>Greg McGuffey</dc:creator></item><item><title>RE: Hierarchal data and tree views</title><link>http://forum.strataframe.net/FindPost3992.aspx</link><description>TreeViews are a wonderful tool in .NET and we use them all over the place...however, though there are similarities between each use, the TreeView is always a little bit different, thus making it a little more difficult to have a hard and fast standard.&lt;/P&gt;&lt;P&gt;Here are some of the standards that we follow though.&amp;nbsp; The best advice is to create recursive methods that build each of the nodes.&lt;/P&gt;&lt;P&gt;Private Sub LoadTree()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Establish Locals&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim loNode As TreeNode&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Clear the tree&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyTreeView.Nodes.Clear()&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Cycle through all of the parent records&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If MyBO.MoveFirst()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Create the new&amp;nbsp;root node&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loNode = New TreeNode(MyBO.MyTitleField)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Load any children nodes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LoadChildNodes(MyBO, loNode)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop While MyBO.MoveNext()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;End SUb&lt;/P&gt;&lt;P&gt;Private Sub LoadChildNodes(Byval ParentBO As BusinessLayer, Byval ParentNode As TreeNode)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'-- Establish Locals&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim loNode As TreeNode&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&amp;nbsp;loChildBO As New MyChildBO&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Load the child records&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; loChildBO.FillByParentPrimaryKey(ParentBO.PrimaryKey)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Cycle through the child nodes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If loChildBO.MoveFirst()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'-- Create the node&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loNode = New TreeNode(loChildBO.TitleField)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Add to parent nodes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParentNode.Nodes.Add(loNode)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Check for child&amp;nbsp;nodes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If loChildBO.HasChildRecords Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LoadChildNodes(loChildBO, loNode)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop While&amp;nbsp;loChildBO.MoveNext()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- Clean Up&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; loChildBO.Dispose()&lt;BR&gt;End Sub&lt;/P&gt;&lt;P&gt;Also, we generally create a class and store it in the tag property of each node so that when it is clicked we know exactly what to do.&amp;nbsp; You can see a simple example of this in the samples that were installed with the framework.&amp;nbsp; I think it is called Explorer Form Sample.</description><pubDate>Mon, 30 Oct 2006 14:52:41 GMT</pubDate><dc:creator>Trent L. Taylor</dc:creator></item></channel></rss>