Click here to Skip to main content
15,888,733 members
Articles / Programming Languages / C#
Article

Hierarchical Tree

Rate me:
Please Sign up or sign in to vote.
3.25/5 (7 votes)
24 Dec 2008CPOL1 min read 61.5K   3K   42   20
Updated version of the wonderful and sleek "Tree Chart Generator" written by Rotem Sapir
Image 1

Introduction

This is an extension to the wonderful and simple tree generator that Rotem Sapir wrote. (TreeGenerator.aspx)

Using the Code

The code base is developed on top of the code that Rotem Sapir had developed. However, there have been updates to the way the node is rendered. This one gives a professional touch with a subtle shadow effect to each of the node.

This also has a provision of specifying the background color to each of the nodes. You could have your own logic of coloring the nodes, either by levels in the organization tree or based on any other geographic or data specific colors (for example, if you are rendering a hierarchy chart to show the % of sales, # of people working under a person etc., etc.,)

This code now supports a selection color for the node, ie., when the user selects a node in the tree the selected color of the node can now be changed by setting the _SelectedBoxFillColor

Here is the sample client code that uses the TreeGenerator:

C#
  public partial class MainForm : Form
  {
    private Color[] hierarchyNodeColor = { Color.FromArgb(26, 80, 160),
        Color.FromArgb(35, 107, 215), Color.FromArgb(100, 152, 230),
        Color.FromArgb(169, 198, 241), Color.FromArgb(178, 207, 250) };
    private TreeBuilder myTree = null;

    public MainForm()
    {
      InitializeComponent();
      InitializeHierarchyTree();
    }

    public void InitializeHierarchyTree()
    {
      picHierarchyTree.Location = containerPanel.Location;
      picHierarchyTree.Dock = DockStyle.Left;
      picHierarchyTree.SizeMode = PictureBoxSizeMode.AutoSize;
      containerPanel.AutoScroll = true;

      LoadHierarchyControl();
    }

    public void LoadHierarchyControl()
    {
      myTree = new TreeBuilder(GetTreeData());
      PaintHierarchyTree();
    }

    private void PaintHierarchyTree()
    {
      picHierarchyTree.Image = Image.FromStream(myTree.GenerateTree(-1, -1, "1",
        System.Drawing.Imaging.ImageFormat.Bmp));
    }
    private TreeData.TreeDataTableDataTable GetTreeData()
    {
      TreeData.TreeDataTableDataTable dt = new TreeData.TreeDataTableDataTable();
      dt.AddTreeDataTableRow("1", "", "Localhost", "This is your Local Server",
          hierarchyNodeColor[0].ToArgb());
      dt.AddTreeDataTableRow("2", "1", "Child 1", "This is the first child.",
          hierarchyNodeColor[1].ToArgb());
      dt.AddTreeDataTableRow("3", "1", "Child 2", "This is the second child.",
          hierarchyNodeColor[2].ToArgb());
      dt.AddTreeDataTableRow("4", "1", "Child 3", "This is the third child.",
          hierarchyNodeColor[3].ToArgb());
      dt.AddTreeDataTableRow("5", "2", "GrandChild 1", "This is the only Grandchild.",
          hierarchyNodeColor[4].ToArgb());
      for (int i = 6; i < 10; i++)
      {
        Random rand = new Random();
        dt.AddTreeDataTableRow(i.ToString(), rand.Next(1, i).ToString(),
            "GrandChild " + i.ToString(), "This is the only Grandchild.",
            hierarchyNodeColor[4].ToArgb());
      }
      return dt;
    }
    private void picHierarchyTree_MouseClick(object sender, MouseEventArgs e)
    {
      // returns the XML node
      XmlNode selectedNode = myTree.OnClick(e.X, e.Y);
      PaintHierarchyTree();
    }

  }
}

Points of Interest

Though the original code base was nice, there were few redundant files and bringing in a shadow effect brought a lot of professional look to the whole code, in addition to removing unncessary code files that were not in use.

History

First version which is based on the TreeGenerator written by Rotem Sapir.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
India India
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralExcellent Work and Help Request Pin
rosunbasha29-Nov-12 0:03
rosunbasha29-Nov-12 0:03 
GeneralMy vote of 1 Pin
Аslam Iqbal26-Aug-12 23:03
professionalАslam Iqbal26-Aug-12 23:03 
GeneralNot working in vs2008 Pin
rdbcrec24-Feb-11 11:24
rdbcrec24-Feb-11 11:24 
GeneralGr8 Control, but modifications needed Pin
a codeproject fan29-Nov-10 2:36
a codeproject fan29-Nov-10 2:36 
GeneralMy vote of 1 Pin
sudheendra96-Jul-10 0:21
sudheendra96-Jul-10 0:21 
GeneralBuild Error Pin
ginu29-Jun-09 20:58
ginu29-Jun-09 20:58 
GeneralRe: Build Error Pin
Nagarajan Rajesh30-Jun-09 6:59
Nagarajan Rajesh30-Jun-09 6:59 
GeneralRe: Build Error Pin
ginu30-Jun-09 18:29
ginu30-Jun-09 18:29 
GeneralHelp Pin
ginu30-Jun-09 18:34
ginu30-Jun-09 18:34 
GeneralRe: Build Error Pin
Bartosz Bien29-Nov-09 21:24
Bartosz Bien29-Nov-09 21:24 
GeneralExcellent Pin
byk2k616-Apr-09 22:11
byk2k616-Apr-09 22:11 
GeneralRe: Excellent Pin
Nagarajan Rajesh18-Apr-09 16:33
Nagarajan Rajesh18-Apr-09 16:33 
GeneralRe: Excellent Pin
Rotem Sapir9-Dec-09 0:09
Rotem Sapir9-Dec-09 0:09 
GeneralDear Nagarajan Pin
Talsja0113-Mar-09 5:56
Talsja0113-Mar-09 5:56 
GeneralRe: Dear Nagarajan Pin
Nagarajan Rajesh18-Mar-09 10:42
Nagarajan Rajesh18-Mar-09 10:42 
GeneralRe: Dear Nagarajan Pin
Talsja0124-Mar-09 1:25
Talsja0124-Mar-09 1:25 
Hello Nagarajan,

I downloaded the demo first. When i open the solution in vs 2008 it converts the project with no errors.
Then i recompile the demo and i get the following errors after i have removed the test project

1)Error 1 'HierarchicalTree.TreeData.TreeDataTableRow' does not contain a definition for 'nodeBackColor' and no extension method 'nodeBackColor' accepting a first argument of type 'HierarchicalTree.TreeData.TreeDataTableRow' could be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Z19\Desktop\HierarchicalTree_demo\HierarchicalTree\TreeBuilder.cs 225 137 HierarchicalTree

2)
Error 2 'HierarchicalTree.TreeData.TreeDataTableRow' does not contain a definition for 'nodeBackColor' and no extension method 'nodeBackColor' accepting a first argument of type 'HierarchicalTree.TreeData.TreeDataTableRow' could be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Z19\Desktop\HierarchicalTree_demo\HierarchicalTree\TreeBuilder.cs 328 121 HierarchicalTree

When i don't remove the test project i get about 4 errors saying hierarchicaltree couldnt be found etc.
So now i have made a new blank solution. Added the hierarchaltree_src project to this new solution i also got the same errors 1 + 2

I will check the code to see if i can deal with these problems.
I will let you hear oke

Thanx again for this project. Love it

Greatings Talsja
GeneralRe: Dear Nagarajan Pin
Nagarajan Rajesh30-Jun-09 7:02
Nagarajan Rajesh30-Jun-09 7:02 
GeneralLink to original article Pin
tonyt28-Dec-08 0:56
tonyt28-Dec-08 0:56 
GeneralRe: Link to original article Pin
Nagarajan Rajesh1-Jan-09 19:27
Nagarajan Rajesh1-Jan-09 19:27 
GeneralGood Pin
prasad0224-Dec-08 4:31
prasad0224-Dec-08 4:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.