CipherIS
asked on
C# - Winforms - TreeView - Multiple Nodes
Apparently my question has been neglected so I am opening up a new question as I need a solution.
I have the Below code. It works fine for a TreeView with two nodes. I have three nodes that I am working on and need to expand it. So, it my data looks something like this.
- Level 1
- Sub Level 2
- Sub Sub Level 3
When I click on Sub Sub Level 3 I want all nodes above check if all nodes above "Sub Sub Level 3 are checked" and unchecked also (the reverse). Right now it will check "Sub Sub Level 3" and "Sub Level 2" but not "level 1". I also want all Nodes below Level 1 checked if Level 1 is checked.
I have the Below code. It works fine for a TreeView with two nodes. I have three nodes that I am working on and need to expand it. So, it my data looks something like this.
- Level 1
- Sub Level 2
- Sub Sub Level 3
When I click on Sub Sub Level 3 I want all nodes above check if all nodes above "Sub Sub Level 3 are checked" and unchecked also (the reverse). Right now it will check "Sub Sub Level 3" and "Sub Level 2" but not "level 1". I also want all Nodes below Level 1 checked if Level 1 is checked.
private void myTreeView_AfterCheck(object sender, TreeViewEventArgs e)
{
if (trvCheckLock)
{
return;
}
trvCheckLock = true;
trvMessageType.BeginUpdate();
try
{
TreeNode item = e.Node;
//If the user checks/unchecks the node that has children,
if (item.Nodes.Count > 0)
{
//All children are unchecked as well
foreach (TreeNode child in item.Nodes)
{
child.Checked = item.Checked;
UpdateObjectModel(item.Text, child.Text, child.Checked);
}
}
//Otherwise (if the item has a parent)
if (item.Parent != null)
{
//The parent node should be checked only when all its children
//are checked too
if (!item.Checked)
{
item.Parent.Checked = false;
}
else
{
bool allChecked = true;
foreach (TreeNode sibling in item.Parent.Nodes)
{
if (!(allChecked = allChecked && sibling.Checked))
{
break;
}
}
item.Parent.Checked = allChecked;
}
}
//Update the list of the selected items to the right
if (item.Parent != null)
UpdateSelected(item);
}
finally
{
trvMessageType.EndUpdate();
trvCheckLock = false;
}
}
ASKER
Overflow exception. Trying to figure it out.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
have you tried just that code before trying to integrate your other call to UpdateObjectModel/...?
Open in new window