Be object-oriented:
public class MyClass
{
public List<MyClass> MyChildren { get; set; }
public MyClass MyParent { get; set; }
}
Fill this virtual tree from DB , than simple recursive function can show it in TreeView:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsTreeView
{
public partial class Form1 : Form
{
MyClass FirstElement;
public Form1()
{
InitializeComponent();
FirstElement = new MyClass() { Name = "I am first" };
FirstElement.MyChildren.Add(new MyClass() { Name = "SecondLevel" });
MyClass oneMoreElement = new MyClass() { Name = "Something" };
FirstElement.MyChildren[0].MyChildren.Add(oneMoreElement);
}
private void button1_Click(object sender, EventArgs e)
{
GetAllFrom(FirstElement , this.treeView1.Nodes);
}
private void GetAllFrom(MyClass LevelElement, TreeNodeCollection treeNodeCollection)
{
TreeNode anyLevel = new TreeNode();
anyLevel.Text = LevelElement.Name;
treeNodeCollection.Add(anyLevel);
foreach (MyClass anyChild in LevelElement.MyChildren)
{
GetAllFrom(anyChild , anyLevel.Nodes);
}
}
}
public class MyClass
{
List<MyClass> myChildren;
public List<MyClass> MyChildren
{
get
{
if (myChildren == null)
{
myChildren = new List<MyClass>();
}
return myChildren;
}
set
{
myChildren = value;
}
}
public string Name { get; set; }
}
}
On Form1 only TreeView and button.