C#+Dev Control TreeList递归绑定

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace TreeListText
{
    /// <summary>
    /// 部门表实体类
    /// </summary>
    public class Department
    {
        /// <summary>
        /// ID
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 编号
        /// </summary>
        public int ParentId { get; set; }
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 级别
        /// </summary>
        public int Level { get; set; }
    }
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 模拟产生部门数据
        /// </summary>
        /// <returns></returns>
        public List<Department> GetDeptData()
        {
            List<Department> lst = new List<Department>();
            //-------------------------------------------------------
            Department dept0 = new Department();
            dept0.Id = 1;
            dept0.ParentId = 0;
            dept0.Name = "所有部门";
            dept0.Level = 0;
            lst.Add(dept0);
            //-------------------------------------------------------
            Department dept1 = new Department();
            dept1.Id = 11;
            dept1.ParentId = 1;
            dept1.Name = "销售部";
            dept1.Level = 1;
            lst.Add(dept1);
            //-------------------------------------------------------
            Department dept11 = new Department();
            dept11.Id = 111;
            dept11.ParentId = 11;
            dept11.Name = "销售1部";
            dept11.Level = 2;
            lst.Add(dept11);
            //-------------------------------------------------------
            Department dept12 = new Department();
            dept12.Id = 112;
            dept12.ParentId = 11;
            dept12.Name = "销售2部";
            dept12.Level = 2;
            lst.Add(dept12);
            //-------------------------------------------------------
            Department dept2 = new Department();
            dept2.Id = 12;
            dept2.ParentId = 1;
            dept2.Name = "人事部";
            dept2.Level = 1;
            lst.Add(dept2);
            //-------------------------------------------------------
            Department dept21 = new Department();
            dept21.Id = 121;
            dept21.ParentId = 12;
            dept21.Name = "人事1部";
            dept21.Level = 2;
            lst.Add(dept21);
            //-------------------------------------------------------
            Department dept22 = new Department();
            dept22.Id = 122;
            dept22.ParentId = 12;
            dept22.Name = "人事2部";
            dept22.Level = 2;
            lst.Add(dept22);
            return lst;
        }
        /// <summary>
        /// 按钮点击事件,给treelist绑定数据源
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnBindTreeList_Click(object sender, EventArgs e)
        {
            try
            {
                List<Department> lst = GetDeptData();
                if (lst.Any())
                {
                    //查询出最顶层部门(无论用什么方式,先取得一个最顶层的作为父节点)
                    Department firstDept = lst.AsEnumerable().Where(p => p.Level == 0 && p.ParentId == 0).ToList()[0];
                    //设置树节点
                    var node = trDept.AppendNode(firstDept.Name, null);
                    node.SetValue("Name", firstDept.Name);
                    BindTreeData(trDept, node, lst, firstDept.Id, firstDept.Level);
                    trDept.ExpandAll();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 递归获取子节点
        /// </summary>
        /// <param name="tree">树</param>
        /// <param name="node">节点</param>
        /// <param name="lst">列表</param>
        /// <param name="parentId">父节点Id</param>
        /// <param name="level">级别</param>
        private void BindTreeData(DevExpress.XtraTreeList.TreeList tree, DevExpress.XtraTreeList.Nodes.TreeListNode node, List<Department> lst, int parentId, int level)
        {
            try
            {
                //这里我的level +1是因为数据级别这样设计了,父节点Id过滤是为了找出该父节点下的子节点,这一步主要就是为了查找下一级的数据(可以通过各种方式去查询)
                var twoListDept = lst.FindAll(p => p.Level == level + 1 && p.ParentId == parentId).ToList();
                foreach (var deptDto in twoListDept)
                {
                    //添加子节点
                    var childNode = node.TreeList.AppendNode(node.Id, node);
                    //设置显示值
                    childNode.SetValue("Name", deptDto.Name);
                    //绑定集合
                    childNode.Tag = deptDto;
                    //递归调用
                    BindTreeData(tree, childNode, twoListDept, deptDto.Id, deptDto.Level);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }


}

发布了36 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35351282/article/details/80852610