Winfrom开发之通过treeview实现树形结构

Winfrom开发之通过treeview实现树形结构

方法一、 节点法

分析 节点法类似于树形结构中的树,通过父节点和子节点 以及节点深度来查找

根节点没有父节点 深度为0

部门与所属子部门的深度差为1,

子部门的父节点是上级部门的主键

例如市场部的父节点为1 节点深度为0

数据库设计如图所示

测试数据

使用的控件

实现代码

//初始化树private void InitTree(){using (SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=company;Integrated Security=True")){if (con.State != ConnectionState.Open){con.Close();con.Open();}SqlCommand cmd = con.CreateCommand();cmd.CommandText = @" Select dname from dparttree where deepth =0 ";//查询根节点SqlDataReader sdr = cmd.ExecuteReader();while (sdr.Read()){TreeNode tchild = new TreeNode();tchild.Text = sdr["dname"].ToString();LoadAll(sdr["dname"].ToString(), tchild);this.treeView1.Nodes.Add(tchild);//把根节点加入到treeview的根节点}}}//加载所属节点public void LoadAll(string departName, TreeNode tn){ //连接数据库using ( SqlConnection conn =new SqlConnection("Data Source=.; Initial Catalog=company;User ID=sa;Password=123")){if (conn.State != ConnectionState.Open){conn.Close();conn.Open();}SqlCommand cmd = conn.CreateCommand();//查询语句 根据部门名称查询当前部门的部门idcmd.CommandText =@" Select dname From dparttree where dparentid in (Select did From dparttree where dname='" +departName + "')";SqlDataReader sdr = cmd.ExecuteReader();while (sdr.Read()){TreeNode tchild = new TreeNode();//初始化一个节点tchild.Name = sdr["dname"].ToString();//给节点名赋值tchild.Text = sdr["dname"].ToString();//给节点文本赋值LoadAll(sdr["dname"].ToString(), tchild);//递归调用加载所属节点方法tn.Nodes.Add(tchild);//把当前节点加入到tn数的节点中}}}

方法2 前缀法

总公司是1

下属公司是技术部11,商务部12

技术部下属前端组111,代码组112,实施组113

查询时根据前缀来辨别所属部门

实现代码

//初始化树private void InitTree2(){using (SqlConnection conn =new SqlConnection("Data Source=.; Initial Catalog=company;User ID=sa;Password=123")){if (conn.State != ConnectionState.Open){conn.Close();conn.Open();}SqlCommand cmd = conn.CreateCommand();cmd.CommandText =@" Select * From T_depart where departid like '1'" ;SqlDataReader sdr = cmd.ExecuteReader();while (sdr.Read()){TreeNode tchild = new TreeNode();tchild.Name = sdr["departid"].ToString();tchild.Text = sdr["departname"].ToString();LoadAll2(sdr["departid"].ToString(), tchild);this.treeView2.Nodes.Add(tchild);}}}//加载所属节点public void LoadAll2(string departid, TreeNode tn){using (SqlConnection conn =new SqlConnection("Data Source=.; Initial Catalog=company;User ID=sa;Password=123")){if (conn.State != ConnectionState.Open){conn.Close();conn.Open();}SqlCommand cmd = conn.CreateCommand();//限定查询位数 如果部门很多 需要2位 那么就需要2个占位符(下划线)departid = departid + "_";//通过通配符查询cmd.CommandText =@" Select * From T_depart where departid like '" + departid+"'";SqlDataReader sdr = cmd.ExecuteReader();while (sdr.Read()){TreeNode tchild = new TreeNode();tchild.Name = sdr["departid"].ToString();tchild.Text = sdr["departname"].ToString();LoadAll2(sdr["departid"].ToString(), tchild);//递归调用加载所属节点方法tn.Nodes.Add(tchild);//把当前节点加入到tn数的节点中}}}

在窗体加载方法中调用2个初始化方法

public TreeDemo(){InitializeComponent();InitTree();//方法一InitTree2();//方法二}

最终效果图

本博是小黄瓜要编程在学习工作中的随笔, 在帮助自己学习和记忆的同时,供给有需要的朋友学习

存在着许多不足,,喜欢大家指出交流,共同学习进步

转载请注明出处

版权声明:本文为博主原创文章,未经博主允许不得转载。

漫过心际的孤独,早已蔚然成冰,而你是这个季节里最美的音符。

Winfrom开发之通过treeview实现树形结构

相关文章:

你感兴趣的文章:

标签云: