使用递归获取TreeList中所有勾选的结点
DevExpress 的TreeList与.Net的TreeView有很大差异,DevExpress的TreeList实际上是一张拥有树特性的二维表。

TreeListNode的数据存储是对象数组,数组里每个元素对应一个Column,所以在设计时必须定义一个
Column,如上图的"部门列表",列头是可以隐藏的。
获取结点的文本是通过:node.GetValue(0),0表示ColumnIndex,是第一列。刚才在写作时找狂找
Text和Caption属性,后来才想到TreeListNode是对象数组,只有通过获取数组中列元素显示标题。
剃归写法:
/// <summary>
/// 使用递归获取TreeList中所有勾选的结点。
/// </summary>
public class Recursion
{
/// <summary>
/// 枚举树中所有结点。
/// </summary>
/// <param name="tree"></param>
/// <returns></returns>
public IList GetCheckNodes(TreeList tree)
{
//用于存储勾选的结点
IList list = new ArrayList();
//首长循环获取已勾选的根结点
foreach (TreeListNode n in tree.Nodes)
{
if (n.Checked) list.Add(new MyNodeItem(n, "根目录的")); //Checked表示勾选
//如果当前结点有子结点集合,再枚举所有子结点
if (n.Nodes.Count > 0)
this.DoGetCheckNodes(list, n);
}
return list;
}
/// <summary>
/// 剃归,扫描所有结点。
/// </summary>
/// <param name="list"></param>
/// <param name="parentNode"></param>
private void DoGetCheckNodes(IList list, TreeListNode parentNode)
{
//枚举当前结点的所有子结点
foreach (TreeListNode n in parentNode.Nodes)
{
if (n.Checked) list.Add(new MyNodeItem(n, "子目录"));
//如果当前结点有子结点集合,再枚举所有子结点
if (n.Nodes.Count > 0)
this.DoGetCheckNodes(list, n);
}
}
}
定义了一个用于存储在ListBoxItemCollection集合中自定义对象
/// <summary>
/// 用于存储在ListBoxItemCollection集合中自定义对象
/// 这是一种非常适用的写法,通过扩展MyNodeItem,可以存储大量定制的信息。
/// 通过重写ToString()方法,在ListBox控件中可以显示自定的信息。
/// </summary>
public class MyNodeItem
{
TreeListNode _n;
string _tag;
public MyNodeItem(TreeListNode n, string tag)
{
_n = n;
_tag = tag;
}
public override string ToString()
{
return _n.GetValue(0).ToString() + "(" + _tag + ")";
}
}
获取结点然后显示:
private void btnGetSelectedNodes_Click(object sender, EventArgs e)
{
IList nodes = new Recursion().GetCheckNodes(this.treeList1);
listBoxControl1.Items.Clear();
foreach (object o in nodes)
listBoxControl1.Items.Add(o);
}
Source code:
DevExpress TreeList树组件自定义TreeListNode的Tooltip的方法(自动消息提示)
DevTreeListView.SetImageIndex 设置TreeList显示的图标
DevStyle.SetTreeListSelectStyle 设置TreeList组件只读状态(用于选择)
C# DevExpress TreeListLookUpEdit 绑定数据源下拉窗体
TreeList显示[+] [-] 线条样式
TreeListNode.HasAsParent详解
DevExpress TreeList 自动加载数据源并显示漂亮图标
数据查询页面支持TreeList展示数据
Winform 快速初始化Dev TreeList树控件的数据
C#绑定TreeList的DataSource属性及获取DataRow数据
[原创]递归读取DataTable加载TreeList控件
创建TreeList及打开TreeListNode.Tag属性对应的窗体
C/S结构快速开发框架使用的DevExpress常用组件|C/S开发框架
.NET代码生成器V6.1 - 快速生成Winform窗体代码
CSFrameworkV6旗舰版 | 单表基础资料窗体完整C#源码|C/S开发框架
ERP,MES软件快速开发平台(Winform+VS2022+C#+.NET7)
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
