精华内容
下载资源
问答
  • C# treeview复选框选中问题 父节点选中 相应的子节点也被选中 父节点不选中 子节点全部不选中;子节点全部选中 父节点也被选中
  • QT treeview ,可以由复选框勾选,分别搞了几种等级的复选框模式,自己写和注释,还不错,也希望和大家多多交流
  • 简单搜了一下没有合适的,只找到一个基础的有瑕疵的树形结构,就在基础上改了增加了复选框以及简化了部分代码。下面上演示效果图,时长25秒,手机卡见谅。 复选框有两种设计模式: 1、子节点选中则父节点选中,适合...
  • 当列表控件选中当前Node时,来刷新子项与父项状态Private Sub tvwMenuList_AfterCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs)CheckNode(e.Node)End SubPrivate Sub .....

    当列表控件选中当前Node时,来刷新子项与父项状态

    Private Sub tvwMenuList_AfterCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs)

    CheckNode(e.Node)

    End Sub

    Private Sub CheckNode(ByRef node As TreeNode)

    If Not Checking Then

    Checking = True

    Dim CheckedNode As TreeNode = node

    Dim checked As Boolean = CheckedNode.Checked

    If checked Then

    If CheckedNode.Nodes.Count > 0 Then

    ChildNodeCheck(CheckedNode, checked)

    'CheckedNode.BackColor = Color.White

    End If

    If CheckedNode.FullPath.ToString.Split("\").Length > 1 Then

    CheckParentNode(CheckedNode.Parent, checked)

    End If

    Checking = False

    Else

    If CheckedNode.Nodes.Count > 0 Then

    ChildNodeCheck(CheckedNode, checked)

    'CheckedNode.BackColor = Color.White

    End If

    If CheckedNode.FullPath.ToString.Split("\").Length > 1 Then

    CheckParentNode(CheckedNode.Parent, checked)

    End If

    Checking = False

    End If

    End If

    End Sub

    Private Sub ChildNodeCheck(ByVal node As TreeNode, ByVal checked As Boolean)

    Dim _node As TreeNode

    For Each _node In node.Nodes

    _node.Checked = checked

    '_node.BackColor = Color.White

    If _node.Nodes.Count > 0 Then

    ChildNodeCheck(_node, checked)

    End If

    Next

    End Sub

    Private Sub CheckParentNode(ByVal node As TreeNode, ByVal checked As Boolean)

    Dim _node As TreeNode

    Dim _full, _empty As Integer

    For Each _node In node.Nodes

    If _node.Checked Then

    _full = _full + 1

    Else

    _empty = _empty + 1

    End If

    Next

    If checked Then

    If _full = node.Nodes.Count Then

    node.Checked = checked

    'node.BackColor = Color.White

    If node.FullPath.ToString.Split("\").Length > 1 Then

    CheckParentNode(node.Parent, checked)

    End If

    Exit Sub

    Else

    node.Checked = checked

    'node.BackColor = Color.Red

    If node.FullPath.ToString.Split("\").Length > 1 Then

    ParentNodeCheck(node.Parent, checked)

    End If

    Exit Sub

    End If

    Else

    If _empty = node.Nodes.Count Then

    node.Checked = checked

    'node.BackColor = Color.White

    If node.FullPath.ToString.Split("\").Length > 1 Then

    CheckParentNode(node.Parent, checked)

    End If

    Exit Sub

    Else

    node.Checked = Not checked

    'node.BackColor = Color.Red

    If node.FullPath.ToString.Split("\").Length > 1 Then

    ParentNodeCheck(node.Parent, Not checked)

    End If

    Exit Sub

    End If

    End If

    End Sub

    Private Sub ParentNodeCheck(ByVal node As TreeNode, ByVal checked As Boolean)

    node.Checked = checked

    'node.BackColor = Color.Red

    If node.FullPath.ToString.Split("\").Length > 1 Then

    ParentNodeCheck(node.Parent, checked)

    End If

    End Sub

    IT精英如同彩票:平凡的人像5块也中不到一样普遍,努力一点你中了5元保了个本。奖金越高,机率也就越小,付出的也越多,盖茨如同500万一样稀有。虽然每天忙碌而平凡,但我努力成为精英,做梦中了500万。

    展开全文
  • C#TreeView控件,节点前带复选框,要实现单击选中父节点,子节点也全部选中,在treeview1_AfterCheck中实现。可是发现如果两次点击隔上1s以上的话完全正常,但一旦两次点击间隔太短的话就只会改变父节点的选择状态...
  • treeView Checkbox选择事件

    千次阅读 2017-04-05 15:18:52
    #region 鼠标点击事件&treeView Checkbox选择事件 private void treeView_MouseClick(object sender, MouseEventArgs e) { TreeNode node = treeView.GetNodeAt(new Point(e.X, e.Y));
    #region 鼠标点击事件&treeView Checkbox选择事件
            private void treeView_MouseClick(object sender, MouseEventArgs e)
            {
                TreeNode node = treeView.GetNodeAt(new Point(e.X, e.Y));
                if (node != null)
                {
                    ChangeChild(node, node.Checked);//影响子节点
                    ChangeParent(node);//影响父节点
                }
            }
    
            //递归子节点跟随其全选或全不选
            private void ChangeChild(TreeNode node, bool state)
            {
                node.Checked = state;
                foreach (TreeNode tn in node.Nodes)
                {
                    ChangeChild(tn, state);
                }
            }
    
            //递归父节点跟随其全选或全不选
            private void ChangeParent(TreeNode node)
            {
                if (node.Parent != null)
                {
                    //兄弟节点被选中的个数 
                    int brotherNodeCheckedCount = 0;
    
                    //遍历该节点的兄弟节点 
                    foreach (TreeNode tn in node.Parent.Nodes)
                    {
                        if (tn.Checked == true)
                        {
                            brotherNodeCheckedCount++;
                        }
                    }
    
                    //兄弟节点全没选,其父节点也不选 
                    if (brotherNodeCheckedCount == 0)
                    {
                        node.Parent.Checked = false;
                        ChangeParent(node.Parent);
                    }
    
                    //兄弟节点只要有一个被选,其父节点也被选 
                    if (brotherNodeCheckedCount >= 1)
                    {
                        node.Parent.Checked = true;
                        ChangeParent(node.Parent);
                    }
                }
            }
            #endregion

    展开全文
  • 实现Treeview Checkbox的三种状态,分别是:选中、没有选中、部分选中。之前有人写了一部分实现Treeview Checkbox第三种状态的代码,但是在点击节点前的“+”或者“-”的时候,也会改变这个节点及其子节点的选中状态...
  • //操作员拥有的权限被选中是下面这个是重点 //遍历所有的treeview节点根据选中操作员应有的权限,对比权限菜单来选中菜单中的复选框 for (var i = 0; i ; i++) { //获得每个节点的nodeid,下面这句代码获的一个节点...

    先上代码:
    首先要引入相应的css,与js

        <link href="~/Content/toolbarCss/roleinfo.css" rel="stylesheet" />
        <link href="~/Content/css/bootstrap.min.css" rel="stylesheet" />
        <link href="~/Content/css/bootstrap-table.css" rel="stylesheet" />
        <link href="~/Content/css/bootstrap-treeview.css" rel="stylesheet" />
        <script src="~/Scripts/jquery2.0.js"></script>
        <script src="~/Scripts/bootstrap.min.js"></script>
        <script src="~/Scripts/bootstrap-table.js"></script>
        <script src="~/Scripts/bootstrap-treeview.js"></script>
    

    在这里插入图片描述首先加载出全部的操作员列表 在右侧设置一个按钮‘设置权限’选中对应操作员 按钮会弹出 一个 bootstrap 的 modal 如下图:

    在这里插入图片描述
    从数据库获取选中操作员应有的权限在复选框中被选中,整个功能代码如下

    <script type="text/javascript">
            $(function () {
               //初始化操作员列表
                Init();
                EditRights();
            });
            function Init() {
                $('#reportTable').bootstrapTable({
                    url: '/UserInfo/UserInfoLists',
                    //dataType: 'json',
                    sidePagination: 'server',//此句代码是向服务器端请求数据
                    method: 'get',
                    cache: false,
                    height: 400,
                    width: 400,
                    striped: true,
                    pagination: true,
                    pageNumber: 1,
                    pageSize: 5,
                    pageList: [5, 10, 20],
                    showColumns: true,
                    showRefresh: true,
                    search: false,
                    clickToSelect: true,
                    singleSelect: true,
                    uniqueId: 'userid',
                    queryParams: function queryParams(params) {
                        var param = {
                            row: params.limit,//获取pageSize  这里的键应该与控制器中request里面一致否则获取不到数据
                            page: (params.offset / params.limit) + 1 //获取pageIndex 获取当前页码的算法
                        };
                        return param
                    },
                    columns: [{ checkbox: true, visible: true },
                        { field: "userid", title: "编号", align: "center", width: 10 },
                        { field: "usernumber", title: "操作员代码", align: "center", width: 180 },
                        { field: "username", title: "操作员名称", align: "center", width: 180 },                
                        {
                            field: "control", title: "操作", align: "center",
                            formatter: operation,
                            events: operateEvents
                        }
                    ]
                });
            }
            //为列表的单元格中添加‘设置权限‘按钮
            function operation(value, row, index) {          
                var result = '<button id="btnSetRights" type="button" class="btn btn-success btn-xs"><span class="glyphicon glyphicon-cog aria-hidden="true"></span> 设置权限</button>';
                return result;
            };
            //在设置权限按钮中增加click事件
            window.operateEvents = {
                'click #btnSetRights': function (e, value, row, index) {
                    var rows = $('#reportTable').bootstrapTable('getSelections');
                    if (!rows || rows.length == 0) {
                        alert('请选中一条要修改的记录!');
                        return;
                    }
                    // 弹出权限框
                    $('#EditRights').modal({
                        show: true,
                        backdrop: 'static',
                        keyboard: true
                    });
                    //加载所有的权限
                    InitRights();
                    //根据选中的操作员在数据库判断是否拥有对应的权限
                    var uid = row.userid;
                    var rid =0;
                    //根据选中的userid,得到角色id
                    $.ajax({
                        url: '/UserInfo/SearchUserInfo',
                        async: false,
                        data: { userid: uid },
                        dataType: 'json',
                        success: function (data) {
                             rid=data.userinfo.roleid;
                        }
                    });
                    //根据选中的操作员的userid,roleid获取当前选中操作员的权限列表
                    var list;
                    $.ajax({
                        url: '/UserInfo/GetRoleRightsByIds',
                        async: false,
                        data: {
                            userid: uid,
                            roleid:rid
                        },
                        dataType: 'json',
                        success: function (data) {
                            list = data.temp;
                        }
                    });
                    //定义一个变量获取treeview中的所有节点的总个数,
                    var nodes = 0;
                    $.ajax({
                        url: '/UserInfo/LoadRoleRight',
                        async: false,
                        data: {},
                        dataType: 'json',
                        success: function (data) {
                            nodes = data.temp;
                        }
                    });
                    //操作员拥有的权限被选中是下面这个是重点
                    //遍历所有的treeview节点根据选中操作员应有的权限,对比权限菜单来选中菜单中的复选框
                    for (var i = 0; i < nodes; i++) {
                       //获得每个节点的nodeid,下面这句代码获的一个节点,根据API文档上的说明,
                       //$('#tree').treeview('getNode', 这里是treeview中节点的索引项目);
                        var node = $('#tree').treeview('getNode', i);
                        //遍历所有选中操作员的权限
                        for (var j = 0; j < list.length; j++) {
                        //如果对应操作员的权限id,与节点上的权限id相等,节点的复选框被选中
                            if (node.nodeid == list[j].rightid) {
                                //这里的list[j].rightid, 是加载的treeview的节点的索引并非是id
                                //下面这句代码就是选中某个节点
                                $('#tree').treeview('checkNode', [i, { silent: true }]);
                            } else {
                                continue;
                            }
                        }
                    }                  
                }
            };
            //初始化treeview
            function InitRights() {
                $('#tree').treeview({
                   //加载功能数据
                    data: getTree(),
                    levels: 2,
                    expandIcon: 'glyphicon glyphicon-chevron-right',
                    collapseIcon: 'glyphicon glyphicon-chevron-down',
                    nodeIcon: 'glyphicon glyphicon glyphicon-th-list',
                    selectedBackColor: false,
                    selectedColor: '#337AB7',
                    showCheckbox: true,
                    multiSelect:true,
                    showBorder: false,
                    onNodeChecked: function (event, node) {
                        var selectNodes = getChildNodeIdArr(node); //获取所有子节点
                        if (selectNodes) { //子节点不为空,则选中所有子节点
                            $('#tree').treeview('checkNode', [selectNodes, { silent: true }]);
                        }
                        var parentNode = $("#tree").treeview("getNode", node.parentId);
                        setParentNodeCheck(node);
                    },
                    onNodeUnchecked: function (event, node) {
                        var selectNodes = getChildNodeIdArr(node); //获取所有子节点
                        if (selectNodes) { //子节点不为空,则取消选中所有子节点
                            $('#tree').treeview('uncheckNode', [selectNodes, { silent: true }]);
                        }
                    }
                });
            }   
            //从前端加载权限数据
            function getTree() {
                //根据返回的数据规则拼接数据
                var tree = '[';
                $.ajax({
                    url: '/UserInfo/LoadRoleRight',
                    async: false,
                    dataType: 'json',
                    data: {},
                    success: function (data) {
                        //一级权限的集合
                        var menup = data.mentp;
                        //二级权限的集合
                        var mentc = data.mentc;
                        //首先加载一级权限
                        for (var i = 0; i < menup.length; i++) {
                                tree += '{text:"' + menup[i].righttext + '",nodeid:' + menup[i].rightid + ',nodes:[';
                            for (var j = 0; j < mentc.length; j++) {
                                //如果二级权限是一级的子权限,把二级权限数据加载一级权限下
                                if (mentc[j].rightparentcode == menup[i].rightid) {
                                        tree += '{text:"' + mentc[j].righttext + '",nodeid:' + mentc[j].rightid + '},'; 
                                }
                                else {
                                    continue;
                                }
                            }
                            tree += ']},';
                        }
                        tree += ']';
                    }
                });
                //数据的规则
                //var tree = [{
                //    text:"第一个节点"
                //}]
                //var tree = '[{' +
                //    'text:' + "'第一个节点'" + '}]';
                //var tree = [{
                //    text: '基础资料管理',
                   
                //    node_id:1,
                      //下级节点规则
                //    nodes: [{
                //        text: '用户管理',
                      
                //        node_id:2
                //    },
                //    {
                //        text: '组织机构管理',
                      
                //        node_id:3
                //    },
                //    {
                //        text: '职称管理',
                        
                //        node_id:4
                //    }]
                //},
                //{
                //    text: '系统管理',
                   
                //    node_id:5,
                //    nodes: [{
                //        text: '权限管理',
                        
                //        node_id:6
                //    },
                //    {
                //        text: '密码管理',
                         
                //        node_id:7
                //    }]
                //}];
                //treeview.js 返回的数据为json类型的数组,在这里拼接成字符串转换成json数组的话不能用json.parse()方法应该用
                //eval()方法  
                tree = eval("(" + tree + ")");
                return tree;
            }
            function EditRights() {
            	//关闭权限菜单
                $('#btnClose').click(function () {
                    $('#EditRights').modal('hide');              
                });
                //设置权限
                $('#btnSetRightInfo').click(function () {
                 	     
                });
            }
            function getChildNodeIdArr(node)
            {
                var ts = [];
                if (node.nodes) {
                    for (x in node.nodes) {
                        ts.push(node.nodes[x].nodeId);
                        if (node.nodes[x].nodes) {
                            var getNodeDieDai = getChildNodeIdArr(node.nodes[x]);
                            for (j in getNodeDieDai) {
                                ts.push(getNodeDieDai[j]);
                            }
                        }
                    }
                } else {
                    ts.push(node.nodeId);
                }
                return ts;  
            }
            function setParentNodeCheck(node) {
                var parentNode = $("#tree").treeview("getNode", node.parentId);
                if (parentNode.nodes) {
                    var checkedCount = 0;
                    for (x in parentNode.nodes) {
                        if (parentNode.nodes[x].state.checked) {
                            checkedCount ++;
                        } else {
                            break;
                        }
                    }
                    if (checkedCount === parentNode.nodes.length) {
                        $("#tree").treeview("checkNode", parentNode.nodeId);
                        setParentNodeCheck(parentNode);
                    }
                }
            }
     
        </script>
    

    服务器端代码

     public ActionResult LoadRoleRight()
            {
                List<HR.Model.rights> list = RgsService.LoadEntitys(o=>true).ToList();
    			//获取一级权限
                var listlv1 = list.Where(o => o.rightparentcode == 0).Select(o => o).ToList();
                //获取二级权限
                var listlv2 = list.Where(o => o.rightparentcode != 0).Select(o => o).ToList();
                return Json(new { mentp=listlv1,mentc=listlv2,temp=list.Count},JsonRequestBehavior.AllowGet);
            }
            //获取选中的操作员
            public ActionResult SearchUserInfo()
            {
                var uid = Convert.ToInt32(Request["userid"]);
                var userInfo = iuService.LoadEntitys(o => o.userid == uid).FirstOrDefault();
                return Json(new { userinfo = userInfo }, JsonRequestBehavior.AllowGet);
            }
            //根据选中的userid,roleid获取对应的权限
             public ActionResult GetRoleRightsByIds()
            {
                var uid = Convert.ToInt32(Request["userid"]);
                var rid = Convert.ToInt32(Request["roleid"]);
                var rolerightlist = RiService.LoadEntitys(o => o.userid == uid && o.roleid == rid).ToList();
                return Json(new { temp = rolerightlist }, JsonRequestBehavior.AllowGet);
            }
    

    服务器端的代码比较简单,用MVC进行的封装,权限的加载选中功能都是通过前端实现的,也可以在
    服务器端实现, 有其他思路的朋友可以加个好友,小弟学习下,大家多多交流提高自己的技术能力

    展开全文
  • vartreeView=$("#treeview").data("kendoTreeView"); varnodes=treeView.dataSource.view(); initSetChecked(ids,nodes); initSetChecked(ids,nodes); ...
    var treeView = $("#treeview").data("kendoTreeView");
    var nodes = treeView.dataSource.view();
    initSetChecked(ids,nodes);
    initSetChecked(ids,nodes);
    	
    function initSetChecked(ids,nodes){
        if(ids != null && ids != ""){
             for (var i = 0; i < ids.length; i++) {
                for (var j = 0; j < nodes.length; j++) {
                    if (ids[i] == nodes[j].id) {
                        nodes[j].set("checked",true);//设置选中复选框
                        treeView.expand(treeView.findByUid(nodes[j].uid));//设置展开节点
                        continue ;
                    }else{
                            if (nodes[j].hasChildren) {
                                    initSetChecked(ids,nodes[j].children.view());
                            } 
                        }
                    }
                }
            }
        }


    转载于:https://my.oschina.net/u/2489390/blog/658218

    展开全文
  • bootstrap的树结构插件,包括树结构显示复选框复选框回显功能,在此记录一下实现过的功能,便于以后使用~ 使用方法: 一、首先引用css和js,仅写自己使用的 jquery-1.11.3.min.js、bootstrap-3.3.7.css、...
  • React复选框树 一个简单优雅的复选框树,用于React。 用法 安装 使用您最喜欢的依赖项管理器安装库: yarn add react-checkbox-tree 使用npm: npm install react-checkbox-tree --save 注–此库使用了样式,并...
  • 首先要注册treeview中的aftercheck事件 要编辑3个方法 /// <summary> /// 选中父节点所有子节点被选中 /// </summary> /// <param name="n">当前选中节点</param> /// <param name=...
  • 可用于权限设置(注意注释的过程)
  • C#TreeView复选框的选择

    千次阅读 2015-11-12 12:30:40
    要想实现:treeview的AfterCheck事件中的: 1.父节点勾选则子节点全部勾选 2.父节点不勾选则子节点全部不勾选 3.子节点全部不勾选则父节点不够而且父节点的文本呈黑色 4.子节点部分勾选则父节点不勾选而且...
  • 刚接触c#,项目中用到Treeview实现三态,即选中、未选中、半选中状态,并且要求父子节点选择联动,效果类似下图网上有很多例子,于是研究了一下,结合网上大佬们的例子,所以在这里记录一下。首先新建一个Winform...
  • 在制作前端向多个站点传输文件时,为方便选择服务器站点,设计此树状结构: 1、勾选父节点,其子节点全部选中。 2、子节点被选中,其上层节点字体变为红色。
  • 【项目】TreeView控件的CheckBox选中事件

    千次阅读 热门讨论 2015-08-31 19:30:03
    Asp.net 2.0 中带有CheckBox的TreeView控件, 父节点CheckBox属性改了后如何修改其子节点的Check状态?  有两种方法:  一是PostBack回服务器端处理:  这种方法,每次PostBack都会刷新页面,同时展开收缩节点...
  • #region 隐藏某些复选框 /// <summary> /// 隐藏根节点复选框 /// </summary> private void TreeNodeCheckBoxs() { this.TreeRule.CheckBoxes = true; ...
  • C#带TreeView 选中复选框里的集合

    千次阅读 2012-08-29 21:02:36
    List<TreeNode> t = getchecknode(this.treeView1.Nodes); } private List<TreeNode> getchecknode(TreeNodeCollection nodes) { List<TreeNode> getnodes = new List(); foreach (TreeNode td in ...
  • 最近做项目用到了treeview。因为涉及到多选的问题,很是棘手,于是乎,我决定查看原生JS,探个究竟。需要引用官方的bootstrap-treeview.js都知道吧,对于所需要引用的,我就不多说了。相信很多人都在网上看到了,有...
  • Public Class Form1Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.LoadMe.TreeView1.ExpandAll()End SubPrivate Sub Button1_Click(ByVal sender As System.O...
  • 最近要用WPF写一个树,同事给了我一个Demo(不知道是从哪里找来的),我基本上就是参照了这个Demo。 先放一下效果图(3棵树): ...子节点存在部分节点选中,部分节点未选中时,父节点为非全选状态(null)(...
  • 本例使用Tix库构建一个带有复选框Treeview。但是,当我运行这个例子时,只要选中Checkbox,该框的文本标签就会消失。在有人能帮我避免上述行为吗?在import Tixclass View(object):def __init__(self, root):self....
  • 在操作treeview的时候,可能用到操作节点的复选框。自己写了这个例子实现了:当父节点选中的时候,子节点也都选中,反之都不选中;当有一个子节点未选中,其父节点也取消选中,当所有子节点选中,则父节点变为选中...
  • parentNode = $('#searchTree').treeview('getParent' , node.nodeId); if (!("nodeId" in parentNode)) { return ; } else { checkAllParent(parentNode); } } // 取消全部父节点 function ...
  • TreeView节点复选框的点击事件

    千次阅读 2009-11-12 09:28:00
    需要在点击树节点的复选框时,触发事件来提交到后台,如是写了下面一段代码:.aspx代码:http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/1999/xhtml"> 树复选框的点击事件 ...
  • treeview 加上复选框

    千次阅读 2014-01-26 15:56:36
    unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ComCtrls, StdCtrls; ... TForm1 = class(TForm)  TreeView1: TTreeView;  But
  • 不管父节点和子节点只要有勾选就可以进修改!![图片说明](https://img-ask.csdn.net/upload/201504/21/1429597630_210933.jpg)
  • 一个易于使用的React Component创建一个复选框组,其中一个复选框用于选中所有复选框,另一个复选框则不选中任何复选框。 安装 npm install --save @createnl/grouped-checkboxes yarn add @createnl/grouped-...
  • // 把新建项插入到模型中 } } } 复选框如下图所示 功能:右边(未添加成员界面)选中复选框,点击添加,被选中的人会移到左边(已有成员) 将按钮和槽函数绑定: connect(ui->pushButtonAdd, SIGNAL(clicked()), ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,909
精华内容 763
关键字:

treeview复选框的选中事件