zoukankan      html  css  js  c++  java
  • Devexpress TreeList选择父级联动

    Treelist当显示复选框后,父级和子级的复选框没有关联,使用过程中很不便,如图所示

    image

    自己给treelist添加父子级联动

     /// <summary>
        /// 初始化TreeList,父子节点选择关联
        /// </summary>
        public class TreeListInitial
        {
            TreeList Tree;
            /// <summary>
            /// 初始化TreeList,父子节点选择关联
            /// </summary>
            /// <param name="tree"></param>
            public TreeListInitial(TreeList tree)
            {
                Tree = tree;
                tree.BeforeCheckNode += tree_BeforeCheckNode;
                tree.AfterCheckNode += tree_AfterCheckNode;
            }
    
            public bool AllowCheck = true;
    
            public void tree_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
            {
                SetCheckedChildNodes(e.Node, e.Node.CheckState);
                SetCheckedParentNodes(e.Node, e.Node.CheckState);
            }
    
            void tree_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
            {
                e.CanCheck = AllowCheck;
    
    
                e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);
            }
    
            public void SetNodeCheckState(TreeListNode node, CheckState checkState)
            {
                Tree.SetNodeCheckState(node, CheckState.Checked);
                SetCheckedChildNodes(node, CheckState.Checked);
                SetCheckedParentNodes(node, CheckState.Checked);
            }
    
            void SetCheckedChildNodes(TreeListNode node, CheckState check)
            {
                for (int i = 0; i < node.Nodes.Count; i++)
                {
                    node.Nodes[i].CheckState = check;
                    SetCheckedChildNodes(node.Nodes[i], check);
    
                }
            }
            void SetCheckedParentNodes(TreeListNode node, CheckState check)
            {
                if (node.ParentNode != null)
                {
                    bool b = false;
                    CheckState state;
                    for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
                    {
                        state = (CheckState)node.ParentNode.Nodes[i].CheckState;
                        if (!check.Equals(state))
                        {
                            b = !b;
                            break;
                        }
                    }
                    node.ParentNode.CheckState = b ? CheckState.Indeterminate : check;
                    SetCheckedParentNodes(node.ParentNode, check);
                }
            }
    
    
        }

    在窗体加载的时候传入需要联动的treelist实例化即可

    new TreeListInitial(tree_Module)

    效果图:

    image

    慎于行,敏于思!GGGGGG
  • 相关阅读:
    数据库镜像搭建
    关于开发人员数据库权限配置以及规范数据库升级流程
    带CheckBox列头的DataGridView
    查询整个数据库中某个特定值所在的表和字段的方法
    SQL Server 2008中获取数据库所有表及其字段名称、类型、长度的SQL
    关于已经上线项目的升级的启示
    SQL语句恢复数据库时一直显示“正在还原”
    带CheckBox列头的DataGridView(一)
    SQL Server中事务处理的注意事项
    group by 使用
  • 原文地址:https://www.cnblogs.com/GarsonZhang/p/4897108.html
Copyright © 2011-2022 走看看