天天看點

TreeList控件子父節點選中

//設定TreeList是否有選中框 TrPoint是TreeList控件的Name

TrPoint.OptionsView.ShowCheckBoxes = true;

//設定CheckBoxs隻有兩種狀态

TrPoint.OptionsBehavior.AllowIndeterminateCheckState = false;

//改變某項的Check屬性時觸發

private void TrPoint_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)

{

SetCheckedChildNodes(e.Node, e.Node.CheckState);

SetCheckedParentNodes(e.Node, e.Node.CheckState);

}

private void TrPoint_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
    {
        e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);
    }

    /// <summary>  
    /// 設定子節點的狀态  
    /// </summary>  
    /// <param name="node"></param>  
    /// <param name="check"></param>  
    private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
    {
        for (int i = 0; i < node.Nodes.Count; i++)
        {
            node.Nodes[i].CheckState = check;
            SetCheckedChildNodes(node.Nodes[i], check);
         
        }
    }

   /// <summary>  
    /// 設定父節點的狀态  
    /// </summary>  
    /// <param name="node"></param>  
    /// <param name="check"></param>  
    private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
    {
        if (node.ParentNode != null)
        {
            bool b = false;
            CheckState state;
            for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
            {
                state = (CheckState)node.ParentNode.Nodes[i].CheckState;
                if (!check.Equals(state))
                {
                    b = !b;
                    break;
                }
            }
            node.ParentNode.CheckState = b ? CheckState.Indeterminate : check;
            SetCheckedParentNodes(node.ParentNode, check);
        }
    }
           

繼續閱讀