博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DevExpress XtraTreeList TreeList复选框选择
阅读量:7072 次
发布时间:2019-06-28

本文共 3332 字,大约阅读时间需要 11 分钟。

  权限管理涉及复选框多勾选。

1.控件属性设置

TreeList.OperationView.ShowCheckBoxes=true;用于显示CheckBox;

TreeList.OperationBehavior.AllowIndeterminateCheckState=true;  设置CheckBox允许第三种状态。

2.控件事件绑定

要实现选择父级节点选择。子级节点全部选中。父级节点未选择。反之。子级节点部分选中。父级节点为第三种状态。

private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)        {            SetCheckedChildNodes(e.Node, e.Node.CheckState);            SetCheckedParentNodes(e.Node, e.Node.CheckState);        }        private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)        {            e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);        }        ///         /// 设置子节点的状态        ///         ///         ///         private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)        {            for (int i = 0; i < node.Nodes.Count; i++)            {                node.Nodes[i].CheckState = check;                SetCheckedChildNodes(node.Nodes[i], check);            }        }        ///         /// 设置父节点的状态        ///         ///         ///         private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.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节点筛选及其节点定位

1.定义类实现方法

class FilterNodeOperation : TreeListOperation    {        string pattern;        public FilterNodeOperation(string _pattern)        {            pattern = _pattern;        }        public override void Execute(TreeListNode node)        {            if (NodeContainsPattern(node, pattern))            {                node.Visible = true;                //if (node.ParentNode != null)                  //    node.ParentNode.Visible = true;                  //必须要递归查找其父节点全部设置为可见                  var pNode = node.ParentNode;                while (pNode != null)                {                    pNode.Visible = true;                    pNode = pNode.ParentNode;                }            }            else                node.Visible = false;        }        bool NodeContainsPattern(TreeListNode node, string pattern)        {            foreach (TreeListColumn col in node.TreeList.VisibleColumns)            {                if (node.GetDisplayText(col).Contains(pattern))                    return true;            }            return false;        }    }

2.调用方法

var operation = new FilterNodeOperation(txtRightName.Text.Trim());   treePriMenus.NodesIterator.DoOperation(operation);

注:在初次加载权限列表时。将Node.Check=true;不会触发节点选中事件。因此不会存在第三种状态出现。需再次调用SetCheckedParentNodes方法

if (node != null)     node.CheckState =CheckState.Checked;      SetCheckedParentNodes(node, node.CheckState);

转载于:https://www.cnblogs.com/TBW-Superhero/p/9078628.html

你可能感兴趣的文章
Ubuntu ssh连接root验证错误
查看>>
Android WebView 详解(持续更新)
查看>>
ElasticSearch动态添加节点及相关配置项
查看>>
Android studio 使用心得(十)---android studio 多渠道打包(三)
查看>>
数据库选型的一些看法
查看>>
PHP接口&抽象类验证笔记
查看>>
Spark Streaming源码解读之No Receivers
查看>>
使用背景图的div宽高自适应
查看>>
sql注入工具
查看>>
MongoDB 开启用户认证登录
查看>>
ADO.NET操作数据库(一)
查看>>
指针与引用的本质区别
查看>>
Auto Layout 使用心得(五)—— 根据文字、图片自动计算 UITableViewCell
查看>>
M3U8在线视频文件下载合成MP4视频(自己想看电影)
查看>>
HTML5的布局的使用
查看>>
hdu 1068 二分图的最大匹配匈牙利算法
查看>>
一个IT人的非典型职场十年 (4)
查看>>
Netty之Recycler实现对象池
查看>>
Netty5入门学习笔记004-使用Netty传输POJO对象(上)
查看>>
Eclipse的快捷键总结
查看>>