C#数据库递归构造treeview树形结构

1、首先数据库: f_id 项目ID号 ,f_front 父ID号 ,f_name名称,f_type类型,f_layer所处层,f_order 同层的顺序号;(f_layer,f_order不要也可,这里我主要是需要同层排序才用到)

2、然后“select f_id,f_front,f_name,f_type from data”取得DataSet数据集dsFrame;treeview 名称设为tvDept

3、写函数 构建treeveiw树形:

public void AddTree(int ParentID, TreeNode pNode)
               {
                   DataView dvTree = new DataView(dtTree); //就是dtTree = dsFrame.Tables[0];
                   string Fstr = "[f_front]          =          " + ParentID;      
                   dvTree.RowFilter = Fstr;
                   foreach (DataRowView Row in dvTree)
                   {
                       TreeNode Node = new TreeNode();
                       if (pNode == null)                  //处理主节点
                       {    
                           Node.Name = Row["f_id"].ToString(); //这里+了2个值分别到Name和Text,可随便
                           Node.Text = Row["f_name"].ToString();
                           if (Row["f_type"].ToString() == "岗位") //这个不要也可以,主要为了不同类型显示不同图标
                           {
                               Node.ImageIndex = 1;
                               Node.SelectedImageIndex=1;
                           }
                           else
                           {
                               Node.ImageIndex = 0;
                               Node.SelectedImageIndex=0;
                           }
                           tvDept.Nodes.Add(Node);    //加入
                           AddTree(Int32.Parse(Row["f_id"].ToString()), Node); //递归
                       }
                       else //处理子节点

                       {      
                           Node.Name = Row["f_id"].ToString();
                           Node.Text = Row["f_name"].ToString();
                           if (Row["f_type"].ToString() == "岗位")
                           {
                               Node.ImageIndex = 1;
                               Node.SelectedImageIndex = 1;
                           }
                           else
                           {
                               Node.ImageIndex = 0;
                               Node.SelectedImageIndex=0;
                           }
                           pNode.Nodes.Add(Node);                    
                           AddTree(Int32.Parse(Row["f_id"].ToString()), Node);
                       }
                   }
               }

4、调用方法

AddTree(0, (TreeNode)null);    //0就是处于最高级其f_front=0,数据库里1为顶层那就是1,这个随便

最好+一句           tvDept.ExpandAll(); 展开所有项。

转载于:https://www.cnblogs.com/craig/archive/2008/07/08/1238322.html

//设定生成树的原始数据 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值