使用递归获取TreeList中所有勾选的结点
使用递归获取TreeList中所有勾选的结点
DevExpress 的TreeList与.Net的TreeView有很大差异,DevExpress的TreeList实际上是一张拥有树特性的二维表。 TreeListNode的数据存储是对象数组,数组里每个元素对应一个Column,所以在设计时必须定义一个 Column,如上图的"部门列表",列头是可以隐藏的。 获取结点的文本是通过:node.GetValue(0),0表示ColumnIndex,是第一列。刚才在写作时找狂找 Text和Caption属性,后来才想到TreeListNode是对象数组,只有通过获取数组中列元素显示标题。 剃归写法: /// <summary> /// 使用递归获取TreeList中所有勾选的结点。 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:
参考文档:
用C#获取局域网内所有机器 C#获取本机可用端口及已经使用的端口 [原创]递归读取DataTable加载TreeList控件 C#绑定TreeList的DataSource属性及获取DataRow数据 获取本地网络内所有SQLServer服务器列表 SQL递归获取当前类别及所有子类别,用于按类型查询 C#使用正则表达式移除所有的Html标记,返回纯文本 C#使用分词算法从文本字符串中抽取关键词模拟百度搜索|CSFramework.COM巨献 C#模拟百度搜索长词自动语义匹配,使用分词算法抽取关键词 C#使用StreamWriter在大文本文件末尾添加一行内容 【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆 CS开发框架获取生成流水号码(单据号码)介绍 性能优化:CSFramework.WebApi获取指定日期范围以内的用户有效令牌 用户数据操作报告(frmOperateReport)窗体使用方法 超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小
其它资料:
什么是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内容管理系统 | |