树形递归处理示例代码

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

转载于:https://www.cnblogs.com/changbaishan/p/3210574.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值