zoukankan      html  css  js  c++  java
  • 树形递归处理示例代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;

    namespace SilverlightApplication4
    {
        public partial class Test1 : UserControl
        {
            public Test1()
            {
                InitializeComponent();
                List<Data> listData = GetListData();
                BuildTree("-1", listData, null);
            }

            private List<Data> GetListData()
            {
                return new List<Data>  //首先数据源必须是树状结构的,然后程序在实现将树状结构的数据组织到一起
                {
                    //根节点(一级节点)
                    new Data{PK ="0000",Name ="供热节能项目", Last="-1"},

                    //二级节点
                    new Data{PK ="00A0",Name ="供热一厂", Last="0000"},
                    //三级级节点
                    new Data{PK = "00A1",Name="热源A",Last = "00A0"},
                    new Data{PK = "00A2",Name="热源B",Last = "00A0"},
                    new Data{PK = "00A3",Name="热源C",Last = "00A0"},

                    //二级节点
                    new Data{PK ="00B0",Name ="供热二厂", Last="0000"},
                    //三级级节点
                    new Data{PK = "00B1",Name="热源X",Last = "00B0"},
                    new Data{PK = "00B2",Name="热源Y",Last = "00B0"},

                    //二级节点
                    new Data{PK ="00C0",Name ="供热三厂", Last="0000"},
                    //三级级节点
                    new Data{PK = "00C1",Name="热源M",Last = "00C0"},
                    new Data{PK = "00C2",Name="热源N",Last = "00C0"},
                    new Data{PK = "00Cx",Name="热源Nx",Last = "00C2"},

                    new Data{PK = "00C3",Name="热源K",Last = "00C0"}
                };
            }

            /// <summary>
            ///
            /// </summary>
            /// <param name="strLast">要挂节点的上级或父节点的主键(注:根节点的上级不存在,故其值为-1)</param>
            /// <param name="listData">过滤指定上级(Last值)的数据源</param>
            /// <param name="tv">要挂节点的父节点(注:根节点的父节点不存在,故其值为null)</param>
            private void BuildTree(string strLast, List<Data> listData,TreeViewItem tv)
            {
                List<Data> list = listData.Where<Data>(item => item.Last == strLast).ToList<Data>();//listData主要参与指定上级数据的过滤
                if (list.Count > 0)
                {
                    foreach (var item in list)
                    {
                        TreeViewItem treeNode = new TreeViewItem();
                        treeNode.Tag = item.PK;
                        treeNode.Header = item.Name;
                        if (strLast == "-1")//根节点挂到treeView1上
                        {
                            treeView1.Items.Add(treeNode);
                        }
                        else//其它节点挂到其所属的父节点上
                        {
                            tv.Items.Add(treeNode);
                        }
                        BuildTree(treeNode.Tag.ToString(), listData, treeNode);
                    }
                }
            }

            //全部展开
            private void SetPositon1(string strPK, ItemCollection items)
            {
                foreach (TreeViewItem item in items)
                {
                    item.IsExpanded = true;
                    if (item.Tag.ToString() == strPK)
                    {
                        item.IsSelected = true;
                        break;
                    }
                    else
                    {
                        if (item.Items.Count > 0)
                        {
                            SetPositon1(strPK, item.Items);
                        }
                    }
                }
            }


            //部分展开
            private void SetPositon2(string strPK, ItemCollection items)
            {
                foreach (TreeViewItem item in items)
                {
                    if (item.Tag.ToString() == strPK)
                    {
                        //选中匹配项
                        item.IsSelected = true;
                        //找到后,往回展开
                        BackExpanded(item);
                        break;
                    }
                    else
                    {
                        if (item.Items.Count > 0)
                        {
                            SetPositon2(strPK, item.Items);
                        }
                    }
                }
            }


            private void BackExpanded(TreeViewItem item)
            {
                if (item.Parent.GetType() == typeof(TreeViewItem))//说明是根节点
                {
                    (item.Parent as TreeViewItem).IsExpanded = true;
                    BackExpanded(item.Parent as TreeViewItem);
                }
            }


            private void button1_Click(object sender, RoutedEventArgs e)
            {
                SetPositon2("00Cx", treeView1.Items);
            }


        }


        class Data
        {
            public string PK { get; set; }
            public string Name { get; set; }
            public string Last { get; set; }
        }
    }

  • 相关阅读:
    最简单,小白易上手 ajax请求数据库信息,echarts页面显示,无需跳转servlet
    北京市民信件大数据简单分析可视化(附加源码) 同含爬虫代码
    echart 横轴 上下分开显示
    echart 横轴倾斜
    echarts 柱状图横轴(x轴)数量太多,可以加一个滚动轴
    错误: 找不到或无法加载主类 org.apache.sqoop.Sqoop
    JAVA爬虫——爬取采集北京市政百姓信件内容——首都之窗(采用htmlunit,webmagic)附源代码、htmlUnit webmagic JAR包
    eclipse 中的DFS Location 找不到了(已解决)
    在Scala 中 val 与 var 的区别(言简意赅 小白易懂 实例代码)
    第21届国际足联世界杯观后感
  • 原文地址:https://www.cnblogs.com/changbaishan/p/3210574.html
Copyright © 2011-2022 走看看