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;
}
}
}
}
C#+Dev Control TreeList递归绑定
猜你喜欢
转载自blog.csdn.net/qq_35351282/article/details/80852610
今日推荐
周排行