版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011609113/article/details/52918174
存个档,以后直接用了。
基本做到:1.选中父节点,子节点根据父节点选中状态调整自身状态。2选中子节点,父节点根据子节点的兄弟节点的状态调整自身状态。
private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
{
PRV_SetState(!e.Node.Checked, e.Node);
}
private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
{
if (e.Node.CheckState == CheckState.Indeterminate)
e.Node.CheckState = CheckState.Checked;
}
//递归设置选中状态
private void PRV_SetState(bool IN_State, TreeListNode IN_CheckedNode)
{
if (IN_CheckedNode.HasChildren)
{
foreach (TreeListNode Each_Node in IN_CheckedNode.Nodes)
{
PRV_SetState(IN_State, Each_Node);
}
}
else
{
IN_CheckedNode.Checked = IN_State;
PRV_SetParrent(IN_CheckedNode);
}
}
//递归设置父节点状态
private void PRV_SetParrent(TreeListNode IN_ChildNode)
{
if (IN_ChildNode.ParentNode == null)
{
return;
}
else
{
foreach (TreeListNode Each_BrotherNode in IN_ChildNode.ParentNode.Nodes)
{
if (Each_BrotherNode.Checked != IN_ChildNode.Checked)
{
IN_ChildNode.ParentNode.CheckState = CheckState.Indeterminate;
return;
}
}
IN_ChildNode.ParentNode.Checked = IN_ChildNode.Checked;
PRV_SetParrent(IN_ChildNode.ParentNode);
}
}