• 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
  • 相关阅读:
    移除HTML5 input在type="number"时的上下小箭头
    JQUERY 实现加入收藏夹功能
    发现移动端在uc浏览器上会放大bug,解决此bug的方法!
    HTML 定时页面跳转
    Some Commands I Used Frequently
    Some Life Tricks I Noticed
    几种工厂模式的区别
    大型DELETE(删除大量数据)的一种解决方案
    笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-10 可编程对象
    笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-09 事务和并发
  • 原文地址:https://www.cnblogs.com/GarsonZhang/p/4897108.html
Copyright © 2020-2023  润新知