我用的是VS2003的开发的时候要实现,在树的节点前有一个复选框按钮,其子节点也有复选框.要求实现当选择父节点时,其子节点自动选择.当取消时也是一样,请各位大侠帮忙.最好有代码.

解决方案 »

  1.   

    function SelectCheckBox()
        {
            var ele = event.srcElement;
            //单击节点上的CheckBox获取所有子节点
            if(ele.type=='checkbox') 
            {
                var childrenDivID = ele.id.replace('CheckBox','Nodes');
                var div = document.getElementById(childrenDivID);
                if(div!=null) 
                {
                    var checkBoxs = div.getElementsByTagName('INPUT');
                    for(var i=0;i<checkBoxs.length;i++) 
                    {
              if(checkBoxs[i].type=='checkbox')
              {
                checkBoxs[i].checked=ele.checked;
                      }
                    }
                 }
              }
        } 
      

  2.   

    /// <summary>
    /// 功能:本方法实现老总要求的权限树选择逻辑。
    /// 创建时间:2006-4-11
    /// </summary>
    private void ApplySelectionLogic()
    {
    if (TreeView1.Nodes.Count > 0)
    {
    ApplySelectChildrenLogic(TreeView1.Nodes[0]); Stack ancestorNodeStack = new Stack(128);
    ApplySelectParentLogic(TreeView1.Nodes[0], ref ancestorNodeStack);
    }
    } /// <summary>
    /// 功能:本方法实现老总要求的权限树选择逻辑中的“将父节点的选定状态有选择地传播到子节点”的部份。
    /// 即,如果选定某节点,而其所有子节点均未被选定,则选定其所有子节点。
    /// 创建时间:2006-4-11
    /// </summary>
    /// <param name="node"></param>
    private void ApplySelectChildrenLogic(TreeNode node)
    {
    if (node.Nodes.Count > 0)
    {
    if (node.Checked == true)
    {
    bool noChildrenChecked = true;
    foreach (TreeNode childNode in node.Nodes)
    {
    if (childNode.Checked == true)
    {
    noChildrenChecked = false;
    break;
    }
    } if (noChildrenChecked == true)
    {
    foreach (TreeNode childNode in node.Nodes)
    childNode.Checked = true;
    }
    } foreach (TreeNode childNode in node.Nodes)
    ApplySelectChildrenLogic(childNode);
    }
    } /// <summary>
    /// 功能:本方法实现老总要求的权限树选择逻辑中的“将子节点的选定状态有选择地传播到父节点”的部份。
    /// 即,如果选定某节点,而其父节点未被选定,则选定其父节点。
    /// 创建时间:2006-4-11
    /// </summary>
    /// <param name="node"></param>
    private void ApplySelectParentLogic(TreeNode node, ref Stack ancestorNodeStack)
    {
    if (node.Checked)
    {
    while (ancestorNodeStack.Count > 0)
    {
    TreeNode ancestor = ancestorNodeStack.Pop() as TreeNode;
    ancestor.Checked = true;
    }
    }
    else
    {
    ancestorNodeStack.Push(node);
    } if (node.Nodes.Count > 0)
    {
    for (int i = 0; i < node.Nodes.Count; ++i)
    {
    ApplySelectParentLogic(node.Nodes[i], ref ancestorNodeStack);
    }
    }

    if (ancestorNodeStack.Count > 0)
    {
    ancestorNodeStack.Pop();
    }
    } /// <summary>
    /// 功能:为权限树中从指定节点开始的子树中的所有对应于基本权限的节点设置特别的外观。
    /// 创建时间:2006-4-11
    /// </summary>
    /// <param name="node">子树的根节点</param>
    /// <param name="privilege">基本权限对应模块的名称的列表</param>
    private void SetNodeStatusForDefaultPrivilege(TreeNode node, ref ArrayList privilege)
    {
    if (privilege.Count == 0)
    return; for (int i = 0; i < privilege.Count; ++i)
    {
    if (privilege[i].ToString() == node.Text)
    {
    node.Checked = true;
    node.DefaultStyle = new CssCollection("color: green;");
    privilege.RemoveAt(i);
    break;
    }
    } foreach (TreeNode childNode in node.Nodes)
    {
    if (privilege.Count == 0)
    break;
    SetNodeStatusForDefaultPrivilege(childNode, ref privilege);
    }
    }忘记了,2003的是回发的TreeView,要在后台写