Devexpress treelist 树形控件 CheckBox 实现带三种状态
Devexpress treelist 树形控件 CheckBox 实现带三种状态(全部选中,部分选中,全部没选中)
1、两个属性:
this.treeList1.OptionsView.ShowCheckBoxes = true; //是否显示CheckBox this.treeList1.OptionsBehavior.AllowIndeterminateCheckState = true; //设置节点是否有中间状态
2、绑定TreeList的两个事件AfterCheckNode和 BeforeCheckNode:
private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e) { SetCheckedChildNodes(e.Node, e.Node.CheckState); SetCheckedParentNodes(e.Node, e.Node.CheckState); } private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e) { e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked); }
3、两个方法:
/// 设置子节点的状态 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); } } /// 设置父节点的状态 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); } }