关闭

带checkbox的treeview父子节点的联动选择

标签: C#treeview
1798人阅读 评论(2) 收藏 举报
分类:

从网上找来,感觉还可以。方便使用。

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown) {
                UpdateCheckStatus(e);
            }
        }

        private void UpdateCheckStatus(TreeViewEventArgs e) {
            CheckAllChildNodes(e.Node);
            UpdateAllParentNodes(e.Node);
        }

        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);
                    }
                }
            }
        }

        private void CheckAllChildNodes(TreeNode treeNode) {
            foreach (TreeNode node in treeNode.Nodes) {
                node.Checked = treeNode.Checked;
                if (node.Nodes.Count > 0) {
                    this.CheckAllChildNodes(node);
                }
            }
        }


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:88918次
    • 积分:1404
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:29篇
    • 译文:0篇
    • 评论:6条
    最新评论