先来看看本实例的完成图(此处只实现其中动态加载功能,其实后续再补上):
技术点:
数据库结构:
其中Depth为节点深度
核心类TreeViewHelper代码(代码写得没水平请不要见笑,呵呵):
public static void CreatTreeView(TreeView _myTreeView, myEx_TreeViewItem _parentNode, DataTable dt, bool isRoot = true, bool isActivity = true, int Depth = 3) { string myFilterString = isRoot? "ParentID = 0":"ParentID = " + _parentNode.ID.ToString(); if (isActivity) { #region 动态加载节点 if (Depth > 0) { foreach (DataRow row in dt.Select(myFilterString)) { myEx_TreeViewItem item = new myEx_TreeViewItem(); item.ID = (int)row["ID"]; item.Depth = (int)row["Depth"]; item.ItemContent = row["NodeName"].ToString(); item.ParentID = (int)row["ParentID"]; item.ItemPath = row["NodePath"].ToString(); item.IconPath = row["IconPath"].ToString(); item.IsExpanded = false; if (isRoot) { _myTreeView.Items.Clear(); //加载根节点前先清除Treeview控件项 item.IsExpanded = true; _myTreeView.Items.Add(item); //新增根节点 } else { item.IsExpanded = false; _parentNode.Items.Add(item); //新增下级节点 } CreatTreeView(_myTreeView, item, dt,false,true,Depth-1); } } #endregion } else { #region 递归生成树 foreach (DataRow row in dt.Select(myFilterString)) { myEx_TreeViewItem item = new myEx_TreeViewItem(); item.ID = (int)row["ID"]; item.Depth = (int)row["Depth"]; item.ItemContent = row["NodeName"].ToString(); item.ParentID = (int)row["ParentID"]; item.ItemPath = row["NodePath"].ToString(); item.IconPath = row["IconPath"].ToString(); if (isRoot) { _myTreeView.Items.Clear(); item.IsExpanded = true; _myTreeView.Items.Add(item); //新增根节点 } else { item.IsExpanded = false; _parentNode.Items.Add(item); //新增下级节点 } CreatTreeView(_myTreeView, item, dt, false); } #endregion } }
public static void CreatTreeViewItemChild(TreeView _myTreeView, myEx_TreeViewItem _SelectedParentItem, DataTable dt, int Depth = 2) { _SelectedParentItem.Items.Clear();
if (Depth > 0) //判断加载的深度,默认只加载两级 { //设定过滤条件 string myFilterString; myFilterString = "ParentID = " + _SelectedParentItem.ID.ToString();
foreach (DataRow row in dt.Select(myFilterString)) { myEx_TreeViewItem item = new myEx_TreeViewItem(); item.ID = (int)row["ID"]; item.Depth = (int)row["Depth"]; item.ItemContent = row["NodeName"].ToString(); item.ParentID = (int)row["ParentID"]; item.ItemPath = row["NodePath"].ToString(); item.IconPath = row["IconPath"].ToString(); item.IsExpanded = false; _SelectedParentItem.Items.Add(item); //新增下级节点 CreatTreeViewItemChild(_myTreeView, item, dt, (Depth - 1)); } } }
有不足之处请指点,代码整理后再分享给大下,以下是程序的Demo,可看看实际效果,需要net4.0版本运行环境
程序DEMO
最新评论