• 热门专题

DevExpress控件TreeList的复选框

作者:SYZ_YUMEIZHOU_YY  发布日期:2012-03-20 11:12:53
  • DevExpress的TreeList要想在节点前面显示复选框,得修改属性OptionsView->ShowCheckBoxes=True

    复选框的子节点与父节点统一的规则有:

    1,选择某一节点时,该节点的子节点全部选择

    2,取消某一节点时,该节点的子节点全部取消选择

    3,某节点的子节点全部选择时,该节点选择

    4,某节点的子节点未全部选择时,该节点不选择

     

    private void treeList1_AfterCheckNode(object sender, NodeEventArgs e) {
                SetCheckedChildNodes(e.Node, e.Node.CheckState);
                SetCheckedParentNodes(e.Node, e.Node.CheckState);
            }
            private void treeList1_BeforeCheckNode(object sender, CheckNodeEventArgs e) {
                e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);
            }
            private void SetCheckedChildNodes(TreeListNode node, CheckState check) {
                for(int i = 0; i < node.Nodes.Count; i++) {
                    node.Nodes[i].CheckState = check;
                    SetCheckedChildNodes(node.Nodes[i], check);
                }
            }
            private void SetCheckedParentNodes(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);
                }
            }
    
    
    
    
    
    
    
    
    
    
    
    
    
     private void GetCheckedID(TreeListNode parentNode)
            {
                if (parentNode.Nodes.Count == 0)
                {
                    return;//递归终止
                }
    
    
                foreach (TreeListNode node in parentNode.Nodes)
                {
                    if (node.CheckState == CheckState.Checked)
                    {
                        DataRowView drv = treeList1.GetDataRecordByNode(node) as DataRowView;//关键代码
                        if (drv != null)
                        {
                            int GroupID= (int)drv["GroupID"];
                            lstCheckedOfficeID.Add(GroupID);
                        }
    
    
      private void btnOK_Click(object sender, EventArgs e)
            {
                
               
                this.lstCheckedOfficeID.Clear();
    
    
                if (treeList1.Nodes.Count > 0)
                {
                    foreach (TreeListNode root in treeList1.Nodes)
                    {
                        GetCheckedOfficeID(root);
                    }
                }
    
    
                string idStr = string.Empty;
                foreach (int id in lstCheckedOfficeID)
                {
                    idStr += id + " ";
                }
    
    
            }
    
                    }
                    GetCheckedOfficeID(node);
                }
            }
    
    

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规