一、使用控件自帶的功能
官方自帶的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();
}
}
效果圖:

