(C#)实现无限级分类树

开发工具以及开发语言:Visual Studio.net 2005 C#

数据库:SQL Server 2000

数据库名:IELKQ 密码为空

向里面添加如下数据(注,其中的部门名称是我乱来的)

解释:DEPT_ID是部门号,NAME_DEP是部门名称,ID_DEPT是所属的部门号,其意义是,如:DEPT_ID 为000000 NAME_DEP为北京检查院,ID_DEPT为000000表示这是根节点,也就是一级节点,又如:DEPT_ID为000004,NAME_DEP为成都检查院,ID_DEPT为000004也是指这是根节点,也是一级节点,又如DEPT_ID为000002,NAME_DEP为检查办,ID_DEPT为000000,表示这个部门是北京检查院的下级部门,也就是二级节点,DEPT_ID为000003这个部门是DEPT_ID为000001的子部门,是它的更下一级节点,

需要的控件不多,一个TreeView控件,其dock属性设置为fill,然后一个Button,其text属性设置为"分类"

大概思路是这样的:现把一级节点(根节点)找出来,也就是DEPT_ID和ID_DEPT相同的记录,然后再用DEPT_ID去找和ID_DEPT相同的记录,那么这些记录就是二级节点,在AddNote(...)函数中把这些二级节点的记录记录在一张新表中(这就是为什么要不断创建新表的原因),并用foreach循环添加这些二级节点,循环中使用递归,这样就不断的添加三级节点,四季节点等等节点这样功能就实现了

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections; using System.Data.SqlClient; namespace 无限级分类树 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string strCon = "server=(local);uid=sa;pwd=;database=IELKQ"; private DataTable DT; private string AddNote(DataTable DT1,string id,TreeNode node) { DataTable dt1; dt1 = new DataTable(); DataColumn dc = new DataColumn(); dc.ColumnName = "DEPT_ID"; DataColumn dc1 = new DataColumn(); dc1.ColumnName = "ID_DEPT"; DataColumn dc2 = new DataColumn(); dc2.ColumnName = "NAME_DEP"; dt1.Columns.Add(dc); dt1.Columns.Add(dc1); dt1.Columns.Add(dc2); foreach (DataRow DR in DT1.Rows) { if (id != DR.ItemArray[0].ToString() && id == DR.ItemArray[1].ToString()) { DataRow dr = dt1.NewRow(); dr["DEPT_ID"] = DR.ItemArray[0].ToString(); dr["ID_DEPT"] = DR.ItemArray[1].ToString(); dr["NAME_DEP"] = DR.ItemArray[2].ToString(); dt1.Rows.Add(dr); } } //创建新表 foreach (DataRow dr1 in dt1.Rows) { TreeNode nodes = new TreeNode(); nodes.Text = dr1.ItemArray[2].ToString(); node.Nodes.Add(nodes); AddNote(DT, dr1.ItemArray[0].ToString(), nodes); } return ""; } private void button1_Click(object sender, EventArgs e) { this.treeView1.Nodes.Clear(); SqlConnection Con = new SqlConnection(strCon); Con.Open(); SqlCommand Com = new SqlCommand(); Com.CommandText = "select DEPT_ID,ID_DEPT,NAME_DEP from DEPT"; Com.Connection = Con; SqlDataAdapter adp = new SqlDataAdapter(); adp.SelectCommand = Com; DataSet DS = new DataSet(); adp.Fill(DS); DT = DS.Tables[0]; ArrayList al = new ArrayList(); ArrayList al1=new ArrayList(); foreach (DataRow dr in DT.Rows) { if (dr.ItemArray[0].ToString() == dr.ItemArray[1].ToString()) { al.Add(dr.ItemArray[0].ToString()); al1.Add(dr.ItemArray[2].ToString()); } } for (int i = 0; i < al.Count; i++) { TreeNode nod=new TreeNode(); nod.Text=al1[i].ToString(); this.treeView1.Nodes.Add(nod); AddNote(DT, al[i].ToString(), nod); } Con.Close(); } private void treeView1_Click(object sender, EventArgs e) { } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值