c# treeView 树形结构递归处理(企业集团型层次树形展示)

做企业集团的层级展示时候,c#的树形控件尤为重要,如果层级过多,则需要递归处理。

1.这是一个层级表,第一列为单位编码,第二列为单位名称,第三列为上级单位。

dwbhdwmcsjgs
A000华美房产集团
A001华美房产集团A000
A002辽宁华美房产公司A001
A003安徽华美房产公司A001
A004四川华美房产公司A001
A005吉林华美房产公司A001
A006云南华美房产公司A001
A007河南华美房产公司A001
A008沈阳华美分公司A002
A009合肥华美分公司A003
A010大连华美分公司A002
A011成都华美分公司A004
A012昆明华美分公司A006
A013长春环美分公司A005
A014沈河房产公司A008
A015大东房产公司A008
A016铁西房产公司A008
A017中山房产公司A010

2.通过winform的树控件来展示列表。

3.代码(这里为了直观认识,手工加入公司行。在项目实施中则提取数据库的数据。)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[]{  
             new DataColumn("dwbh",typeof(string)),  
             new DataColumn("dwmc",typeof(string)),  
             new DataColumn("sjgs",typeof(string))});

            
            DataRow r = dt.NewRow();
            r[0] = string.Format("{0}", "A000");
            r[1] = string.Format("{0}", "华美房产集团");
            r[2] = string.Format("{0}", "");
            dt.Rows.Add(r);


            DataRow r0 = dt.NewRow();
            r0[0] = string.Format("{0}","A001");
            r0[1] = string.Format("{0}", "华美房产集团");
            r0[2] = string.Format("{0}", "A000");
            dt.Rows.Add(r0);

            DataRow r1 = dt.NewRow();
            r1[0] = string.Format("{0}","A002");
            r1[1] = string.Format("{0}", "辽宁华美房产公司");
            r1[2] = string.Format("{0}","A001");
            dt.Rows.Add(r1);

            DataRow r2 = dt.NewRow();
            r2[0] = string.Format("{0}","A003");
            r2[1] = string.Format("{0}", "安徽华美房产公司");
            r2[2] = string.Format("{0}","A001");
            dt.Rows.Add(r2);

            DataRow r3 = dt.NewRow();
            r3[0] = string.Format("{0}","A004");
            r3[1] = string.Format("{0}", "四川华美房产公司");
            r3[2] = string.Format("{0}","A001");
            dt.Rows.Add(r3);

            DataRow r4 = dt.NewRow();
            r4[0] = string.Format("{0}","A005");
            r4[1] = string.Format("{0}", "吉林华美房产公司");
            r4[2] = string.Format("{0}","A001");
            dt.Rows.Add(r4);

            DataRow r5 = dt.NewRow();
            r5[0] = string.Format("{0}","A006");
            r5[1] = string.Format("{0}", "云南华美房产公司");
            r5[2] = string.Format("{0}","A001");
            dt.Rows.Add(r5);

            DataRow r6 = dt.NewRow();
            r6[0] = string.Format("{0}","A007");
            r6[1] = string.Format("{0}", "河南华美房产公司");
            r6[2] = string.Format("{0}","A001");
            dt.Rows.Add(r6);

            DataRow r7 = dt.NewRow();
            r7[0] = string.Format("{0}", "A008");
            r7[1] = string.Format("{0}", "沈阳华美分公司");
            r7[2] = string.Format("{0}", "A002");
            dt.Rows.Add(r7);

            DataRow r8 = dt.NewRow();
            r8[0] = string.Format("{0}", "A009");
            r8[1] = string.Format("{0}", "合肥华美分公司");
            r8[2] = string.Format("{0}", "A003");
            dt.Rows.Add(r8);

            DataRow r9 = dt.NewRow();
            r9[0] = string.Format("{0}", "A010");
            r9[1] = string.Format("{0}", "大连华美分公司");
            r9[2] = string.Format("{0}", "A002");
            dt.Rows.Add(r9);

            DataRow r10 = dt.NewRow();
            r10[0] = string.Format("{0}", "A011");
            r10[1] = string.Format("{0}", "成都华美分公司");
            r10[2] = string.Format("{0}", "A004");
            dt.Rows.Add(r10);

            DataRow r11 = dt.NewRow();
            r11[0] = string.Format("{0}", "A012");
            r11[1] = string.Format("{0}", "昆明华美分公司");
            r11[2] = string.Format("{0}", "A006");
            dt.Rows.Add(r11);

            DataRow r12 = dt.NewRow();
            r12[0] = string.Format("{0}", "A013");
            r12[1] = string.Format("{0}", "长春环美分公司");
            r12[2] = string.Format("{0}", "a005");
            dt.Rows.Add(r12);

            DataRow r13 = dt.NewRow();
            r13[0] = string.Format("{0}", "A014");
            r13[1] = string.Format("{0}", "沈河房产公司");
            r13[2] = string.Format("{0}", "A008");
            dt.Rows.Add(r13);

            DataRow r14 = dt.NewRow();
            r14[0] = string.Format("{0}", "A015");
            r14[1] = string.Format("{0}", "大东房产公司");
            r14[2] = string.Format("{0}", "A008");
            dt.Rows.Add(r14);

            DataRow r15 = dt.NewRow();
            r15[0] = string.Format("{0}", "A017");
            r15[1] = string.Format("{0}", "中山房产公司");
            r15[2] = string.Format("{0}", "A010");
            dt.Rows.Add(r15);

            AddTree("A000", (TreeNode)null, dt);

        }


        public void AddTree(String ParentID, TreeNode pNode, DataTable table)
        {

            DataView dvTree = new DataView(table); //dtTree = dsFrame.Tables[0];
            string Fstr = "sjgs='" + ParentID + "'";
            dvTree.RowFilter = Fstr;
            treeView1.ImageList = this.imageList1;
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)          //处理主节点
                {
                    Node.Name = Row["dwbh"].ToString(); 
                    Node.Text = Row["dwbh"].ToString() + Row["dwmc"].ToString();
                    if ((Row["dwmc"].ToString()).Contains("华美")) 
                    {
                        Node.ImageIndex = 0;
                        Node.SelectedImageIndex = 0;
                    }
                    else if ((Row["dwmc"].ToString()).Contains("房产"))
                    {
                        Node.ImageIndex = 2;
                        Node.SelectedImageIndex = 2;
                    }
                    
                    treeView1.Nodes.Add(Node);  
                    AddTree(Row["dwbh"].ToString(), Node, table); //递归
                }
                else //处理子节点
                {
                    Node.Name = Row["dwbh"].ToString();
                    Node.Text = Row["dwbh"].ToString() + Row["dwmc"].ToString();
                    if ((Row["dwmc"].ToString()).Contains("华美")) 
                    {
                        Node.ImageIndex = 0;
                        Node.SelectedImageIndex = 0;
                    }
                    else if ((Row["dwmc"].ToString()).Contains("房产"))
                    {
                        Node.ImageIndex = 2;
                        Node.SelectedImageIndex = 2;
                    }
                  
                    pNode.Nodes.Add(Node);
                    AddTree(Row["dwbh"].ToString(), Node, table);
                }
            }

        }


        
    }
}

//设定生成树的原始数据 void getdatable() { tblDatas.Columns.Add("groupid", Type.GetType("System.String")); tblDatas.Columns.Add("groupname", Type.GetType("System.String")); tblDatas.Columns.Add("parentid", Type.GetType("System.String")); tblDatas.Rows.Add(new object[] { "1", "机关", "0" }); tblDatas.Rows.Add(new object[] { "2", "学院", "0" }); tblDatas.Rows.Add(new object[] { "3", "教学管理中心", "1" }); tblDatas.Rows.Add(new object[] { "4", "校园管理中心", "1" }); tblDatas.Rows.Add(new object[] { "5", "数据中心", "3" }); tblDatas.Rows.Add(new object[] { "6", "信息中心", "3" }); tblDatas.Rows.Add(new object[] { "7", "一卡通", "4" }); tblDatas.Rows.Add(new object[] { "8", "保卫处", "4" }); tblDatas.Rows.Add(new object[] { "9", "信工系", "2" }); tblDatas.Rows.Add(new object[] { "10", "艺术系", "2" }); dataGridView1.DataSource = tblDatas; } //递归生成树函数 public void AddTree(int ParentID, TreeNode pNode) { DataTable dt = new DataTable(); dt = tblDatas; DataView dvTree = new DataView(dt); //过滤ParentID,得到当前的所有子节点 dvTree.RowFilter = "parentid = " + ParentID; foreach (DataRowView Row in dvTree) { TreeNode Node = new TreeNode(); if (pNode == null) { //添加根节点 Node.Text = Row["groupname"].ToString(); treeView1.Nodes.Add(Node); AddTree(Int32.Parse(Row["groupid"].ToString()), Node); //再次递归 } else { //添加当前节点的子节点 Node.Text = Row["groupname"].ToString(); pNode.Nodes.Add(Node); AddTree(Int32.Parse(Row["groupid"].ToString()), Node); //再次递归 } } } //调用递归函数在treeView1里面显示给出数据的树形图 private void button1_Click(object sender, EventArgs e) { treeView1.Nodes.Clear(); AddTree(0, (TreeNode)null); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT技术与企业应用结合的爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值