TreeView 和Checkbox 同步选中状态
#region 选中checkbox事件
private void updateTreeViewChecked(TreeViewEventArgs e)
{
TreeNode node = e.Node;
checkAllChilds(node);
checkAllParents(node);
}
#endregion
#region 用递归的方法同步所有字节点
private void checkAllChilds(TreeNode treeNode)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = treeNode.Checked;
if (node.Nodes.Count > 0)
{
this.checkAllChilds(node);
}
}
}
#endregion
#region 用递归的办法同步所有父节点
private void checkAllParents(TreeNode treeNode)
{
TreeNode parent = treeNode.Parent;
if (parent != null)
{
//有一个子节点非checked状态,则父节点就是非checked状态
if (parent.Checked && !treeNode.Checked) {
parent.Checked = false;
checkAllParents(parent);
}
//如果所有的子节点都是checked状态,则父节点应该是checked状态
else if (!parent.Checked && treeNode.Checked) {
bool allChecked = true;
foreach(TreeNode node in parent.Nodes){
if (!node.Checked) {
allChecked = false;
break;
}
}
if (allChecked)
{
parent.Checked = true;
}
}
}
}
#endregion
持续学习、持续收获才能带来持续的满足和快乐!
浙公网安备 33010602011771号