在WPF中,使用代码动态的创建树状图 TreeView

直接上代码

public void TreeCOMToParent()
    {
        //每次执行前要清除之前的TreeView的痕迹
        treeView.Items.Clear();
        //通过在数据库中查到的DataTable为数据源,也可以换做是别的数据源list,xml
        var ComTree = SqliteDB.SelectComName("RealTimeData").Rows;
        RemoverDate();
        foreach (DataRow item in ComTree)
        {
            Yeardata.Clear();
            TreeViewItem comtree = new TreeViewItem();//一级
            comtree.IsExpanded = true;
            comtree.Tag = 1;
            comtree.Header = item.ItemArray[0];
            TreeViewItem groupA = new TreeViewItem();//二级
            groupA.Tag = 2;
            groupA.IsExpanded = true;
            groupA.Header = "组1";
            //点击事件,为什么不用click ,因为我tmd也找不到这个事件在哪!有大神知道吗!!!!
            groupA.MouseUp += GroupA_MouseUp;   
            SeleteDateTime(comtree.Header.ToString(), groupA); //三级,在三级节点中可以再次添加节点
            comtree.Items.Add(groupA);        //把二级节点添加到一级节点下
                 
                //下面的同上,可以不用看,只是在相同的节点中添加了兄弟节点 
            TreeViewItem groupB = new TreeViewItem();//二级
            groupB.Header = "组2";
            groupB.IsExpanded = true;
            groupB.MouseUp += GroupA_MouseUp;
            groupB.Tag = 2;
            SeleteDateTime(comtree.Header.ToString(), groupB);//三级
            comtree.Items.Add(groupB);

            TreeViewItem groupC = new TreeViewItem();//二级
            groupC.Header = "组3";
            groupC.IsExpanded = true;
            groupC.Tag = 2;
            groupC.MouseUp += GroupA_MouseUp;
            SeleteDateTime(comtree.Header.ToString(), groupC);//三级
            comtree.Items.Add(groupC);

            TreeViewItem groupD = new TreeViewItem();//二级
            groupD.Header = "组4";
            groupD.IsExpanded = true;
            groupD.Tag = 2;
            groupD.MouseUp += GroupA_MouseUp;
            SeleteDateTime(comtree.Header.ToString(), groupD);//三级
            comtree.Items.Add(groupD);

            treeView.Items.Add(comtree);       把一级节点添加到TreeView节点下
        }
    }

在这里插入图片描述
三级节点就是通过SeleteDateTime方法来实现的。
List Yeardata = new List();
List Monthdata = new List();
//收集年和月做判断节点是否存在,存在就向下添加添加子节点,不存在就添加当前节点,并把节点收集到list中,做下次循环中的判断

 public void SeleteDateTime(string treeA, TreeViewItem Groups)
    {
        Yeardata.Clear();
        Monthdata.Clear();
        var DateTree = SqliteDB.SelectTime(treeA, Groups.Header.ToString()).Rows;//通过组查询其子集的信息
        foreach (DataRow itemtiem in DateTree)
        {
            var splicdian = itemtiem.ItemArray[0].ToString().Split('.');//分配年.月.日时间

            TreeViewItem treeYear = new TreeViewItem();
            var istfyear = Yeardata.FirstOrDefault(o => o.Header.ToString().Equals(splicdian[0] + "年"));//判断有没有这     年    份
            if (istfyear == null)
            {
                Monthdata.Clear();
                treeYear.Header = splicdian[0] + "年"; //年
                treeYear.IsExpanded = true;
                Yeardata.Add(treeYear);
                Groups.Items.Add(treeYear);

                //InsertYearTree(treeYear);//在年下面创建12个月份

                TreeViewItem treeMonth = new TreeViewItem();
                var istfmonth = Monthdata.FirstOrDefault(o => o.Header.ToString().Equals(splicdian[1] + "月"));//判断有没有这    月 份
                if (istfmonth == null)
                {
                    treeMonth.Header = splicdian[1] + "月"; //月
                    Monthdata.Add(treeMonth);
                    treeYear.Items.Add(treeMonth);

                    TreeViewItem Tiemdate = new TreeViewItem();
                    Tiemdate.Tag = 3;
                    Tiemdate.Header = itemtiem.ItemArray[0]; //时间总览
                    Tiemdate.MouseUp += Tiemdate_MouseUp;
                    treeMonth.Items.Add(Tiemdate);
                }
            }
            else
            {
                var istfmonth = Monthdata.FirstOrDefault(o => o.Header.ToString().Equals(splicdian[1] + "月")); ;//判断有没有这    月 份
                if (istfmonth == null)
                {
                    TreeViewItem treeMonth = new TreeViewItem();
                    treeMonth.Header = splicdian[1] + "月"; //月
                    Monthdata.Add(treeMonth);
                    istfyear.Items.Add(treeMonth);

                    TreeViewItem Tiemdate = new TreeViewItem();
                    Tiemdate.Tag = 3;
                    Tiemdate.Header = itemtiem.ItemArray[0]; //时间总览
                    Tiemdate.MouseUp += Tiemdate_MouseUp;
                    treeMonth.Items.Add(Tiemdate);
                }
                else
                {
                    TreeViewItem Tiemdate = new TreeViewItem();
                    Tiemdate.Tag = 3;
                    Tiemdate.Header = itemtiem.ItemArray[0]; //时间总览
                    Tiemdate.MouseUp += Tiemdate_MouseUp;
                    istfmonth.Items.Add(Tiemdate);
                }
            }
        }
    }

效果图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值