zoukankan      html  css  js  c++  java
  • TreeView复选框选择逻辑判断

    在mobile里使用TreeView控件时,控件本身没有提供节点复选框选择判断逻辑。

    如选中父节点,所有子节点全部选中;

    取消父节点,同时也取消所有子节点;

    或者选中所有子节点,父节点自动选中等等。

     

    以下代码能够实现:

     

    view plaincopy to clipboardprint?

    1. /// <summary>   
    2. /// 复选框点击事件   
    3.  /// </summary>   
    4. /// <param name="sender"></param>   
    5. /// <param name="e"></param>   
    6. private void tvPeople_AfterCheck(object sender, TreeViewEventArgs e)  
    7. {  
    8.     if (e.Action != TreeViewAction.Unknown)  
    9.     {  
    10.         if (e.Node.Nodes.Count > 0)  
    11.         {  
    12.             this.CheckAllChildNodes(e.Node, e.Node.Checked);  
    13.         }  
    14.         CheckParentNodes(e.Node);  
    15.     }  
    16. }  
    17.   
    18. /// <summary>   
    19. /// 递归设置子节点   
    20. /// </summary>   
    21. /// <param name="treeNode">节点对象</param>   
    22. /// <param name="nodeChecked">是否选择</param>   
    23. private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)  
    24. {  
    25.     foreach (TreeNode node in treeNode.Nodes)  
    26.     {  
    27.         node.Checked = nodeChecked;  
    28.         if (node.Nodes.Count > 0)  
    29.         {  
    30.             this.CheckAllChildNodes(node, nodeChecked);  
    31.         }  
    32.     }  
    33. }  
    34.   
    35. /// <summary>   
    36. /// 递归设置父节点   
    37. /// </summary>   
    38. /// <param name="treeNode"></param>   
    39. private void CheckParentNodes(TreeNode treeNode)  
    40. {  
    41.     if (null != treeNode.Parent)  
    42.     {  
    43.         int count = treeNode.Parent.Nodes.Count;  
    44.         if (treeNode.Checked == true)  
    45.         {  
    46.             for (int i = 0; i < count; i++)  
    47.             {  
    48.                 if (treeNode.Parent.Nodes[i].Checked == false)  
    49.                     break;  
    50.                 if (i == count - 1)  
    51.                     treeNode.Parent.Checked = true;  
    52.             }  
    53.         }  
    54.         else  
    55.         {  
    56.             for (int i = 0; i < count; i++)  
    57.             {  
    58.                 if (treeNode.Parent.Nodes[i].Checked == true)  
    59.                     break;  
    60.                 if (i == count - 1)  
    61.                     treeNode.Parent.Checked = false;  
    62.             }  
    63.         }  
    64.         CheckParentNodes(treeNode.Parent);  
    65.     }  
    66. }  
  • 相关阅读:
    Visual Studio中View页面与Js页面用快捷键互相跳转
    使用NLog记录业务日志到数据库
    Js笛卡尔乘积
    多线程更新一个表里面的不同行也可能会死锁
    当请求参数与网站编码不一致时乱码解决方法
    WIN7下vs2010滑轮滚动不正确的解决方法
    VS 2017 代码报错编译正常
    C#表达式树
    .net core 学习 读取配置文件
    .net core 上传文件Demo
  • 原文地址:https://www.cnblogs.com/flyptt/p/2317542.html
Copyright © 2011-2022 走看看