none
treeview 问题 RRS feed

  • 问题

  • 我想用treeview实现类似这样的权限分配

    功能1  增  删  改
       子功能11  增  删  改
       子功能12 增  删  改
    功能2  增  删  改
       子功能21 增 删  改
       子功能22 增 删  改

    功能下面可能有子功能,增删改代表一个checkbox
    点父功能的增删改,全选对应的子功能的增删改
    比如,选中了功能1的增,那么子功能11,子功能12都会选中。

    不知treeview能否实现这样的功能。如果不行,不知有什么其他解决的方案?

    2010年5月2日 5:47

答案

  • 你好!

         通过AfterCheck事件来遍历选中所有子节点:

    // Updates all child tree nodes recursively.
    private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
    {
      foreach(TreeNode node in treeNode.Nodes)
      {
       node.Checked = nodeChecked;
       if(node.Nodes.Count > 0)
       {
         // If the current node has child nodes, call the CheckAllChildsNodes method recursively.
         this.CheckAllChildNodes(node, nodeChecked);
       }
      }
    }
    
    // NOTE  This code can be added to the BeforeCheck event handler instead of the AfterCheck event.
    // After a tree node's Checked property is changed, all its child nodes are updated to the same value.
    private void node_AfterCheck(object sender, TreeViewEventArgs e)
    {
      // The code only executes if the user caused the checked state to change.
      if(e.Action != TreeViewAction.Unknown)
      {
       if(e.Node.Nodes.Count > 0)
       {
         /* Calls the CheckAllChildNodes method, passing in the current 
         Checked value of the TreeNode whose checked state changed. */
         this.CheckAllChildNodes(e.Node, e.Node.Checked);
       }
      }
    }


    周雪峰
    • 已标记为答案 ogra 2010年5月2日 9:14
    2010年5月2日 7:33
    版主
  • 呵呵 感覺 jquery或者dojo等裏邊的tree js控件 處理這種情況更容易 不用頻繁的回發
    I see you~http://hi.baidu.com/1987raymondMy Blog~~~
    • 已标记为答案 ogra 2010年5月2日 9:14
    2010年5月2日 8:33
    版主
  • 增删改 各代表一个checkbox,这样可以么。就是说一个treenode里能否放三个checkbox。


    你好!

         不支持这样的样式啊!


    周雪峰
    • 已标记为答案 ogra 2010年5月2日 9:14
    2010年5月2日 9:04
    版主

全部回复

  • 你好!

         通过AfterCheck事件来遍历选中所有子节点:

    // Updates all child tree nodes recursively.
    private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
    {
      foreach(TreeNode node in treeNode.Nodes)
      {
       node.Checked = nodeChecked;
       if(node.Nodes.Count > 0)
       {
         // If the current node has child nodes, call the CheckAllChildsNodes method recursively.
         this.CheckAllChildNodes(node, nodeChecked);
       }
      }
    }
    
    // NOTE  This code can be added to the BeforeCheck event handler instead of the AfterCheck event.
    // After a tree node's Checked property is changed, all its child nodes are updated to the same value.
    private void node_AfterCheck(object sender, TreeViewEventArgs e)
    {
      // The code only executes if the user caused the checked state to change.
      if(e.Action != TreeViewAction.Unknown)
      {
       if(e.Node.Nodes.Count > 0)
       {
         /* Calls the CheckAllChildNodes method, passing in the current 
         Checked value of the TreeNode whose checked state changed. */
         this.CheckAllChildNodes(e.Node, e.Node.Checked);
       }
      }
    }


    周雪峰
    • 已标记为答案 ogra 2010年5月2日 9:14
    2010年5月2日 7:33
    版主
  • 增删改 各代表一个checkbox,这样可以么。就是说一个treenode里能否放三个checkbox。
    2010年5月2日 8:08
  • 呵呵 感覺 jquery或者dojo等裏邊的tree js控件 處理這種情況更容易 不用頻繁的回發
    I see you~http://hi.baidu.com/1987raymondMy Blog~~~
    • 已标记为答案 ogra 2010年5月2日 9:14
    2010年5月2日 8:33
    版主
  • 增删改 各代表一个checkbox,这样可以么。就是说一个treenode里能否放三个checkbox。


    你好!

         不支持这样的样式啊!


    周雪峰
    • 已标记为答案 ogra 2010年5月2日 9:14
    2010年5月2日 9:04
    版主