private bool treeCheckUpdating = false;
private void treeViewControlCells_AfterCheck(object sender, TreeViewEventArgs e)
{
if (treeCheckUpdating == true)
{
return;
}
if(e.Node.Parent != null)//the selected node is not the topmost node
{
treeCheckUpdating = true;
foreach (TreeNode node in e.Node.Parent.Nodes)
{
node.Checked = e.Node.Checked;
}
treeCheckUpdating = false;
// check parent level nodes simultaneously
e.Node.Parent.Checked = true;
}// end of if(e.Node.Parent != null)//the selected node is not the topmost node
// if it is uncheck, then uncheck all the child nodes simultaneously
treeCheckUpdating = true;
if (e.Node.Checked == false && e.Node.Nodes != null)
{
UncheckChildNodes(e.Node);
}
treeCheckUpdating = false;
}
private void UncheckChildNodes(TreeNode node)
{
if(node.Nodes != null)
{
foreach(TreeNode n in node.Nodes)
{
n.Checked = false;
UncheckChildNodes(n);
}
}
}// end of private void UncheckChildNodes(TreeNode node)