做企业集团的层级展示时候,c#的树形控件尤为重要,如果层级过多,则需要递归处理。
1.这是一个层级表,第一列为单位编码,第二列为单位名称,第三列为上级单位。
dwbh | dwmc | sjgs |
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);
}
}
}
}
}