DevExpress XtraTreeList TreeList复选框选择

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

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);
        }

        /// <summary>
        /// 设置子节点的状态
        /// </summary>
        /// <param name="node"></param>
        /// <param name="check"></param>
        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);
            }
        }

        /// <summary>
        /// 设置父节点的状态
        /// </summary>
        /// <param name="node"></param>
        /// <param name="check"></param>
        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

时间: 2024-07-29 18:12:09

DevExpress XtraTreeList TreeList复选框选择的相关文章

DevExpress之TreeList复选框实现

概述:本文主要讲述DevExpress TreeList复选框实现,希望对大家有帮助. 一.TreeList的GetStateImage事件应用 方法一:此事件用于在tree之前设置显示的图片,具体使用方法是首先在窗体上放置imagelist,设置好图片,即可在事件中判断后,选择要显示的图片的索引值即可. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 private void treeList_GetStateImage(object sender, Dev

DevExpress XtraTreeList的复选框 禁用

树的2个事件代码如下,通过节点的tag判断是否禁用节点前的复选框.树的节点加载时设置要禁用的节点tag为-1,不禁用的则设为相关的值 private void treeListPer_CustomDrawNodeCheckBox(object sender, DevExpress.XtraTreeList.CustomDrawNodeCheckBoxEventArgs e)        {            //TreeListNode listNode = sender as TreeL

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(一)

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中,这个问题分一下几步走 1.将弹出框真分页后复选框选择的数据保存. 2.将弹出框保存的数据传到父页面上. 3.将数据在父页面上显示. 4.点击保存将信息存入数据库中. 首先来第一步将弹出框真分页后复选框选择的数据保存. 思路很简单就是先真分页,然后在点击下一页的时候扫描这一页所有点击复选框的数据保存到一个变量数组中.下面就是主要代码: ASP代码: <%@ Page Language="C#" AutoEventWire

DevExpress XtraGrid RepositoryItemCheckEdit 复选框多选的解决方法

1. RepositoryItemCheckEdit默认有三种状态,选中状态.未选中状态和半选中状态(半选中状态通常用在TreeList中如果父节点下的子节点有选中的有未选中的,则父节点状态为半选中状态).如果RepositoryItemCheckEdit所在的列未绑定数据源,那么该列默认只可以单选:如果绑定了数据源,那么可以同时多选. 2. 问题描述: 上述描述的ColumEdit关联FieldName数据源,但是在设计功能中并不仅仅这样就可以同时多选,还是选中后,在Grid其他的位置再单击鼠

如何根据集合动态构建复选框选择控件

背景:根据列表或集合,构建复选框控件,从中选取若干选项.比如,构建城市选择控件,城市按照字母分组进行展示.再比如,构建学生选择控件,学生按照城市进行分组展示.常作为分部视图使用. 效果图: 如图,城市以红色字体显示,李雷来自北京,同时Lily和Lucy来自纽约. HTML代码如下: 1 <table><tr><td><input type="checkbox" id="checkedAll" onclick="wh

jQuery+SpringMVC中的复选框选择与传值

一.checkbox选择 在jQuery中,选中checkbox通用的两种方式: $("#cb1").attr("checked","checked");$("#cb1").attr("checked",true); 对应的jQuery函数,主要完成三个功能: 1.第一个复选框选中或取消选中,则下面的复选框为全选或取消全选: 2.当下面的复选框全部选中时,则将第一个复选框设置为选中,当下面的复选框中有一个没

实现复选框选择的功能

2015年4月9日 天气冷 这里以"用户授权"为例说明 实现方法一(适合弹出modal的场景): 后台代码如下: /** * 用户授权 * */ public String authorization() throws Exception { //action为0代表请求授权页面,action为1代表需要更新数据到数据库 if (getAction().equals("0")) { user = userService.get(userId); //获得用户所有权限

复选框选择全部或只选单个

//html网页代码 <tr> <td> <input type="checkbox" name="vehicle_qx" id="vehicle_qx" value="0" onclick="vehicle_qx(0)"/><font>全部</font> <input type="checkbox" name="

复选框 省市区 联动(监听input的change事件)

需求:省市区三级包含复选框按钮以及文字描述.点击文字显示对应的下级地区,点击复选框选择对应的下级区域勾选. 分析:监听input的change事件当点击复选框省  选择对应的第一个市区,同时默认选中第三级区域的第一个.同理监听span或者label(因为label与input的搭配使用) 辅助:后台提供省市区的数据: 两种方式: A:后台直接给dom结构(后台写好基本构架,前段自己在后台code填写需要的dom,class,方便前端开发) B:后台直接给前段一个json数据,前段自己遍历.(和后