winform treeview 动态生成树形结构

数据模型为:id、文本、父亲id

 

创建TreeView:   TreeView treeV = new TreeView();

绑定根目录:

          this.TreeV.Nodes.Clear();//清空节点
            TreeV_M.LabelEdit = false;//不可编辑
            //添加根结点
            TreeNode root = new TreeNode();

             root.Text = "学生管理系统";

            TreeV.Nodes.Add(root);

 

创建树节点模型:
    public class TreeNodeText
    {
        public int id { get; set; }
        public string text { get; set; }
        public int parentId { get; set; }
    }

定义list集合存储树节点模型数据:

List<TreeNodeText>  tree = new List<TreeNodeText>();

将数据全部添加进 tree中。

 

 调用 CreateChildNode(root, 0);递归加载节点

 

private void CreateChildNode(TreeNode parentNode, int parentId)
        {
            //找到该节点下的子项(父节点值等于该节点编号)
            var nodes = from list in this.tree
                        where list.parentId.Equals(parentId)
                        select list;
            //创建该节点子节点
            foreach (var item in nodes)
            {
                TreeNode node = new TreeNode();
                node.Text = item.text;
                //父节点添加子节点
                parentNode.Nodes.Add(node);                
                //调用自身:递归
                CreateChildNode(node, item.id);
            }
        }

 

对于采用非主线程加载的,可以使用委托来进行绑定:

在线程函数中添加://递归委托实现树
            Action bindtree=() =>
            {               
                CreateChildNode(root, 0);
                TreeV_M.Nodes[0].Expand(); //展开一级目录
            };
            TreeV_M.BeginInvoke(bindtree);

 

 

 

 

 

 

 

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页