zoukankan      html  css  js  c++  java
  • Winfrom TreeView 绑定数据

    在Winform。。TreeView绑定数据
    RoleManager tManager = new RoleManager();
                DataTable dt = tManager.FindRoleRigthByRoleid(listRoleView.SelectedItems[0].Text);
                TreeViewBinding(dt, liv_alreadyRole);

    绑定数据方法:

     
     private void TreeViewBinding(DataTable dt, TreeView tv)
            {
                tv.Nodes.Clear();
                foreach (DataRow item_p in dt.Rows)
                {
                    if (item_p["ParentNode"].ToString() == "00")
                    {
                        TreeNode nodep = new TreeNode(item_p["NodeName"].ToString());
                        nodep.Tag = item_p;
                        tv.Nodes.Add(nodep);
                        foreach (DataRow item_child in dt.Rows)
                        {
                            if (item_child["ParentNode1"].ToString() == item_p["Nodeid"].ToString())
                            {
                                TreeNode cnode = new TreeNode(item_child["NodeName"].ToString());
                                cnode.Tag = item_child;
                                nodep.Nodes.Add(cnode);
                            }
                        }
                    }
                }
            }
    
     

    父节点:选中的时候 选中当前所有的子节点:

    设置当前TreeViw AfterCheck的事件:

     //event
       void ListFullRoleAfterCheck(object sender, TreeViewEventArgs e)
            {
               
                    if (e.Action == TreeViewAction.ByMouse)
                    {
                        if (e.Node.Checked)
                        {
                            //取消节点选中状态之后,取消所有父节点的选中状态
                            SetChildNode(e.Node, true);
                            if (e.Node.Parent != null)
                            {
                                SetParentNode(e.Node, true);
                            }
                        }
                        else
                        {
                            //取消节点选中状态之后,取消所有父节点的选中状态
                            SetChildNode(e.Node, false);
                            //如果节点存在父节点,取消父节点的选中状态
                            if (e.Node.Parent != null)
                            {
                                SetParentNode(e.Node, false);
                            }
                        }
                    }
          
            }
     
       private void SetParentNode(TreeNode node, bool state)
            {
                TreeNode nodes = node.Parent;
                nodes.Checked = state;
                if (node.Parent.Parent != null)
                {
                    SetParentNode(node, state);
                }
            }
    
        private void SetChildNode(TreeNode node, bool state)
            {
                TreeNodeCollection nodes = node.Nodes;
                if (nodes.Count > 0)
                {
                    foreach (TreeNode cloneable in nodes)
                    {
                        cloneable.Checked = state;
                        SetChildNode(cloneable, state);
                    }
                }
            }
    
     
  • 相关阅读:
    MySQL 之 Metadata Locking 研究
    Spring, MyBatis 多数据源的配置和管理
    ThreadLocal 源码剖析
    Java多线程中的死锁问题
    Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)
    PriorityQueue和Queue的一种变体的实现
    被我们忽略的HttpSession线程安全问题
    Java并发之原子变量和原子引用与volatile
    使用Java实现单线程模式
    这些年无处安放的博客
  • 原文地址:https://www.cnblogs.com/w2011/p/2771865.html
Copyright © 2011-2022 走看看