DevExpress XtraTreeList控件設置多選模式


一、使用控件自帶的功能

       官方自帶的Demo里面就有,在此僅列出常用的屬性/方法/事件;

1、多選模式

(1)效果圖(截取自官方Demo)

      

 

(2)涉及的屬性/方法/事件

// 啟用多選功能
treeList.OptionsSelection.MultiSelect = true;
// 設置多選模式
treeList.OptionsSelection.MultiSelectMode = TreeListMultiSelectMode.CellSelect;

      選中的節點可以通過treeList1.Selection獲取。顯然,這種方法對於有些用戶是不太友好的,請看勾選功能。

2、勾選模式

(1)效果圖(截取自官方Demo)

        

 

 

(2)涉及的屬性/方法/事件

// 顯示勾選框
treeList.OptionsView.ShowCheckBoxes = true;

//設置勾選框樣式(一般情況下只需要設置這一條屬性就可以了)
 treeList1.OptionsView.CheckBoxStyle = DevExpress.XtraTreeList.DefaultNodeCheckBoxStyle.Check;


//自定義不同節點勾選框樣式
treeList.Nodes[0].ChildrenCheckBoxStyle = NodeCheckBoxStyle.Check;
treeList.Nodes[1].Nodes[0].ChildrenCheckBoxStyle = NodeCheckBoxStyle.Radio;
treeList.Nodes[1].Nodes[1].ChildrenCheckBoxStyle = NodeCheckBoxStyle.Radio;
treeList.Nodes[1].Nodes[2].ChildrenCheckBoxStyle = NodeCheckBoxStyle.Radio;

//獲取勾選的節點
 this.treeList.GetAllCheckedNodes();

//選中/取消選中節點及其子節點
e.Node.CheckAll();
e.Node.UncheckAll();

//允許有中間狀態
this.treeList1.OptionsBehavior.AllowIndeterminateCheckState = true;

//選中節點時,自動選中子節點
 treeList1.OptionsBehavior.AllowRecursiveNodeChecking = true

//選中節點前觸發事件
this.treeList1.BeforeCheckNode

//選中節點后觸發事件
this.treeList1.AfterCheckNode

  

二、自定義勾選模式

       官方自帶的功能可以能滿足大多數使用場景。但美中不足的是,在AllowRecursiveNodeChecking功能啟用時,沒有辦法單獨選中有子節點的節點。

下面的方法利用BeforeCheckNode事件,實現選中節點的各種姿勢:

 private void TreeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
        {
            bool allChildNodeChecked = true;
            bool allChildNodeUnChecked = true;
            for (int i = 0; i < e.Node.Nodes.Count; i++)
            {
                if (e.Node.Nodes[i].CheckState == CheckState.Checked)
                    allChildNodeUnChecked = false;
                if (e.Node.Nodes[i].CheckState == CheckState.Unchecked)
                    allChildNodeChecked = false;
            }

            if(e.Node.CheckState==CheckState.Unchecked&&allChildNodeUnChecked)
            {
                e.Node.CheckState = CheckState.Checked;
            }
            else if(!allChildNodeChecked&&!allChildNodeUnChecked)
            {
                e.Node.CheckAll();
            }
            else if(e.Node.CheckState==CheckState.Checked&&allChildNodeUnChecked)
            {
                e.Node.CheckAll();
            }
            else if(e.Node.CheckState==CheckState.Checked&&allChildNodeChecked)
            {
                e.Node.UncheckAll();
            }
        }

  

效果圖:

                 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM