• 树形递归处理示例代码


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

  • 相关阅读:
    循环获取数据
    implode
    获取二维数组中的值
    根据id获取某一类的最大最小值
    array_column的作用
    用curl模拟夹带cookie的http请求
    phpunit——执行测试文件和测试文件中的某一个函数
    call_user_func
    9 [面向对象]-内置方法
    8 [面向对象]-反射
  • 原文地址:https://www.cnblogs.com/changbaishan/p/3210574.html
Copyright © 2020-2023  润新知