When there are no Large Amounts of Data then it is not good to connect database, fetch data and add to treeview node again and again for child/sub nodes. It can be done in single attempt. In following example, ID=-1 for root nodes.
First we need to fetch all data from database:
string sourceConnection = "<Connection string>";
DataTable dtTree = new DataTable();
using (SqlConnection connection = new SqlConnection(sourceConnection))
{
SqlCommand dbCommand = new SqlCommand();
dbCommand.CommandText = "Select ID,ParentID,Title from tblTree";
dbCommand.CommandType = CommandType.Text;
dbCommand.Connection = connection;
SqlDataAdapter da = new SqlDataAdapter(dbCommand);
da.Fill(dtTree);
da.Dispose();
dbCommand.Dispose();
connection.Dispose();
}
AddNodes(-1, treeView1.Nodes);
"AddNodes" Method adds nodes in treeview and based on recursion.
void AddNodes(int id, TreeNodeCollection tn)
{
foreach (DataRow dr in dtTree.Select("ParentID = " + id))
{
TreeNode sub = new TreeNode(dr["Title"].ToString(), dr["ID"].ToString());
tn.Add(sub);
AddNodes(Convert.ToInt32(sub.Value), sub.ChildNodes);
}
}
Hope, It helps.