[WinForm][DevExpress][TreeList]父子节点CheckState状态同步

关键代码:

        /// <summary>
        ///同步父子节点勾选状态
        ///说明
        ///在AfterCheckNode事件中使用代码
        ///eg:e.Node.SyncNodeCheckState(e.Node.CheckState);
        /// </summary>
        /// <param name="node">需要同步的节点</param>
        /// <param name="check">节点当前勾选状态</param>
        public static void SyncNodeCheckState(this TreeListNode node, CheckState check)
        {
            SyncNodeCheckState_Child(node, check);
            SyncNodeCheckState_Parent(node, check);
        }
        private static void SyncNodeCheckState_Child(TreeListNode node, CheckState check)
        {
            if (node != null)
            {
                node.DownRecursiveNode(n => n.CheckState = check);
            }
        }
        private static void SyncNodeCheckState_Parent(TreeListNode node, CheckState check)
        {
            if (node.ParentNode != null)
            {
                bool _cked = false;
                CheckState _ckState;
                foreach (TreeListNode cn in node.ParentNode.Nodes)
                {
                    _ckState = cn.CheckState;
                    if (check != _ckState)
                    {
                        _cked = !_cked;
                        break;
                    }
                }
                node.ParentNode.CheckState = _cked ? CheckState.Indeterminate : check;
                SyncNodeCheckState_Parent(node.ParentNode, check);
            }
        }
        /// <summary>
        /// 向下递归TreeListNode节点
        /// </summary>
        /// <param name="node">需要向下递归的节点</param>
        /// <param name="conditionHanlder">委托</param>
        public static void DownRecursiveNode(this TreeListNode node, Action<TreeListNode> conditionHanlder)
        {
            foreach (TreeListNode _childNode in node.Nodes)
            {
                conditionHanlder(_childNode);
                DownRecursiveNode(_childNode, conditionHanlder);
            }
        }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

代码效果:

[WinForm][DevExpress][TreeList]父子节点CheckState状态同步

时间: 2024-10-13 08:47:41

[WinForm][DevExpress][TreeList]父子节点CheckState状态同步的相关文章

DevExpress TreeList 父子节点复选框状态同步

1.给TreeList tlstRegion添加一个自定列(包含) TreeListColumn IsAll; RepositoryItemCheckEdit repositoryChk = new RepositoryItemCheckEdit();chkIsAll.EditValueChanging += chkIsAll_EditValueChanging;tlstRegion.RepositoryItems.Add(chkIsAll);this.IsAll.ColumnEdit = ch

[WinForm][DevExpress][TreeList]节点互斥

关键代码: /// <summary> /// 节点互斥同步 /// 说明 /// eg: ///TreeListNode _node = e.Node; ///_node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab); /// </summary> /// <param name="node">需要互斥同步的节点</para

[WinForm][DevExpress][TreeList]向上递归,获取公共父节点

最近项目开发中,需要获取到公共节点,如图: 譬如,当点击"Test103-2"节点,其类型是"灯"类型,那怎么获取到"中心区域"这个类型是"地域"的公共节点了?(不知道描述清楚木有哈) 核心代码: /// <summary> /// 向上递归,获取符合条件的父节点 /// </summary> /// <param name="node">需要向上递归的节点</pa

[WinForm][DevExpress][TreeList]条件隐藏节点CheckBox

关键代码: /// <summary> /// 隐藏CheckBox /// 说明 /// 在CustomDrawNodeCheckBox事件中使用 /// eg: /// TreeList _curTree = (TreeList)sender; /// _curTree.HideCheckBox(n => n.GetNodeType() == NodeType.Area || n.GetNodeType() == NodeType.CabsGroupRoot, e); /// <

[WinForm][DevExpress][TreeList]向上递归,获取符合条件的父节点

关键代码: /// <summary> /// 向上递归,获取符合条件的父节点 /// </summary> /// <param name="node">需要向上递归的节点</param> /// <param name="conditionHanlder">判断条件[委托]</param> /// <returns>符合条件的节点[TreeListNode]</return

[WinForm][DevExpress]设置TreeList图片节点背景色

关键代码: /// <summary> /// 设置图片节点的背景色 /// 说明:在CustomDrawNodeImages事件中使用 /// </summary> /// <param name="tree">TreeList</param> /// <param name="e">CustomDrawNodeImagesEventArgs</param> /// <param nam

[DevExpress]获取TreeList可见节点集合

关键代码: /// <summary> /// 获取可视区域节点 /// </summary> /// <param name="treeList">TreeList</param> /// <param name="conditonHanlder">条件委托</param> /// <returns>可视区域节点集合</returns> public static Li

DevExpress TreeList使用教程之绑定多级树

DevExpress TreeList使用教程之绑定多级树 概述:TreeList控件可以同时显示树结构和其他数据列,即在一个列上建立父子关系展开或收缩,同时还可以显示其他列的内容.在TreeList中同时引入了 Node和 Columns概念, 第一列为树结构, 其余列为数据列, 任何列都可作为树结构列(即拖动到第一列)显示 TreeList控件可以同时显示树结构和其他数据列,即在一个列上建立父子关系展开或收缩,同时还可以显示其他列的内容. 在TreeList中同时引入了 Node和 Colu

Devexpress TreeList选择父级联动

Treelist当显示复选框后,父级和子级的复选框没有关联,使用过程中很不便,如图所示 自己给treelist添加父子级联动 /// <summary> /// 初始化TreeList,父子节点选择关联 /// </summary> public class TreeListInitial { TreeList Tree; /// <summary> /// 初始化TreeList,父子节点选择关联 /// </summary> /// <param