#region treeview联动方法
private void UpdateCheckStatus(TreeViewEventArgs e)
{
CheckAllChildNodes(e.Node);
UpdateAllParentNodes(e.Node);
}
// updates all parent nodes recursively.
private void UpdateAllParentNodes(TreeNode treeNode)
{
TreeNode parent = treeNode.Parent;
if (parent != null)
{
if (parent.Checked && !treeNode.Checked)
{
parent.Checked = false;
UpdateAllParentNodes(parent);
}
else if (!parent.Checked && treeNode.Checked)
{
bool all = true;
foreach (TreeNode node in parent.Nodes)
{
if (!node.Checked)
{
all = false;
break;
}
}
if (all)
{
parent.Checked = true;
UpdateAllParentNodes(parent);
}
}
}
}
// updates all child tree nodes recursively.
private void CheckAllChildNodes(TreeNode treeNode)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = treeNode.Checked;
if (node.Nodes.Count > 0)
{
// If the current node has child nodes, call the CheckAllChildsNodes method recursively.
this.CheckAllChildNodes(node);
}
}
}
#endregion
#region treeview上下级联动事件
private void tvDevc_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
UpdateCheckStatus(e);
}
}
#endregion