منظورم از اون ParentId اسم ستونیه که توی DataTable به عنوان ستون Parent در نظر گرفته شده. توی BindData سطرهایی که ParentId برابر صفر دارند رو پیدا می کنیم و در حلقه For ضمن اضافه کردن اونا به TreeView فرزندانشون به صورت Recursive توسط FindChildNodes پیدا شده و به TreeView اضافه می شوند.
public class ShowTreeView
{
private TreeView TreeView1 = new TreeView();
private DataTable DT;
public ShowTreeView(TreeView TV, DataTable DT)
{
TreeView1 = TV;
TreeView1.Nodes.Clear();
this.DT = DT;
BindData();
}
private void BindData()
{
DataView ParentRows = new DataView(DT);
ParentRows.RowFilter = "ParentId=0";
for (int i = 0; i < ParentRows.Count; i++)
{
TreeNode tn = new TreeNode();
tn.Tag = ParentRows[i]["id"].ToString();
tn.Text = ParentRows[i]["Name"].ToString();
TreeView1.Nodes.Add(tn);
FindChildNodes(ParentRows[i]["id"].ToString(),TreeView1.Nodes[i]);
}
}
private void FindChildNodes(string ParentID, TreeNode TV)
{
DataView ChildRows = new DataView(DT);
ChildRows.RowFilter = "ParentId=" + ParentID;
for (int i = 0; i < ChildRows.Count; i++)
{
TreeNode tn = new TreeNode();
tn.Tag = ChildRows[i]["id"].ToString();
tn.Text = ChildRows[i]["Name"].ToString();
TV.Nodes.Add(tn);
FindChildNodes(ChildRows[i]["id"].ToString(), TV.Nodes[i]);
}
}
}