使用字符串绑定TreeView

 【解析字符串】      
        private TreeNode node;
        private TreeNode parent;
        private TreeNode root;

        //解析字符串,绑定到TreeView上
        private void ReadNavItems(string text, TreeView tv)
        {
            this.disposeTreeNode();
            string item = "";
            string[] array;

            foreach (char aChar in text)
            {
                if (aChar == '{')
                {
                    if (item != "")
                    {
                        if (node != null)
                        {
                            parent = node;
                            node = new TreeNode();
                            node.Text = item;
                            parent.Nodes.Add(node);
                        }
                        else
                        {
                            node = new TreeNode();
                            node.Text = item;
                            root = node;
                        }
                        item = "";
                    }
                }
                else if (aChar == '}')
                {
                    if (item != "")
                    {
                        array = item.Split(',');
                        int count = array.Length;
                        for (int i = 0; i < count; i++)
                        {
                            TreeNode child = new TreeNode();
                            child.Text = array[i].ToString();
                            node.Nodes.Add(child);
                            child = null;
                        }
                    }
                    item = "";
                    node = parent;
                    if (parent != null && parent.Parent != null)
                    {
                        parent = parent.Parent as TreeNode;
                    }
                }
                else
                {
                    item += aChar;
                }
            }
            tv.Nodes.Add(root);
        }

        //释放资源
        private void disposeTreeNode()
        {
            node = null;
            parent = null;
            root = null;
        }


【组装字符串】
  //组装字符串
        private string AssemblyStr()
        {
            StringBuilder sb = new StringBuilder();
            if (tvMenu.Nodes.Count > 0)
            {
                foreach (TreeNode tn in tvMenu.Nodes)
                {
                    sb.Append("{");
                    if (tn.Checked)
                    {
                        sb.Append(tn.Text);
                        GetCheckNode(tn, sb);
                    }
                    else
                    {
                        string text = "";
                        for (int i = 0; i < tn.Text.Length; i++)
                        {
                            text += "0";
                        }
                        sb.Append(text);
                    }
                    sb.Append("}");
                }
            }
            return sb.ToString();

        }

        //组装字符串       
        private void GetCheckNode(TreeNode node, StringBuilder sb)
        {
            if (node.Nodes.Count > 0)
            {
                sb.Append("{");
                foreach (TreeNode tn in node.Nodes)
                {

                    if (tn.Checked)
                    {
                        if (tn.Nodes.Count > 0)
                            sb.Append(tn.Text);
                        GetCheckNode(tn, sb);
                    }
                    else
                    {
                        if (tn.Nodes.Count > 0)
                        {
                            string text = "";
                            for (int t = 0; t < tn.Text.Length; t++)
                            {
                                text += "0";
                            }
                            sb.Append(text);
                        }
                        GetCheckNode(tn, sb);
                    }
                }
                if (sb.ToString().EndsWith(","))
                    sb = sb.Remove(sb.Length - 1, 1);
                sb.Append("}");
            }
            else
            {
                if (node.Checked == true)
                {
                    sb.Append(node.Text + ",");
                }
                else
                {
                    string text = "";
                    for (int t = 0; t < node.Text.Length; t++)
                    {
                        text += "0";
                    }
                    sb.Append(text + ",");
                }
            }
        }


【加载用户权限】
 //加载用户权限
        private void ReadNavItems(string text, string permission, TreeView tv)
        {
            tv.Nodes.Clear();
            this.disposeTreeNode();
            string item = "";
            string userItem = "";
            string[] array;

            char[] charU = permission.ToCharArray();
            char[] charP = text.ToCharArray();
            for (int j = 0; j < charU.Length; j++)
            {
                if (charP[j] == '{')
                {
                    if (item != "")
                    {
                        if (node != null)
                        {
                            parent = node;
                            node = new TreeNode();
                            node.Text = item;
                            if (charP[j - 1].Equals(charU[j - 1]))
                            {
                                tv.AfterCheck -= new TreeViewEventHandler(tvMenu_AfterCheck);
                                node.Checked = true;
                            }
                            parent.Nodes.Add(node);
                        }
                        else
                        {
                            node = new TreeNode();
                            node.Text = item;
                            root = node;
                            if (charP[j - 1] == charU[j - 1])
                            {
                                tv.AfterCheck -= new TreeViewEventHandler(tvMenu_AfterCheck);
                                node.Checked = true;
                            }
                        }
                        item = "";
                        userItem = "";
                    }
                }
                else if (charP[j] == '}')
                {
                    if (item != "")
                    {
                        array = item.Split(',');
                        var arrayList = userItem.Split(',');
                        int count = array.Length;
                        for (int i = 0; i < count; i++)
                        {
                            TreeNode child = new TreeNode();
                            child.Text = array[i].ToString();
                            node.Nodes.Add(child);
                            if (arrayList[i] == array[i])
                            {
                                tv.AfterCheck -= new TreeViewEventHandler(tvMenu_AfterCheck);
                                child.Checked = true;
                            }
                            child = null;
                        }
                    }
                    item = "";
                    userItem = "";
                    node = parent;
                    if (parent != null && parent.Parent != null)
                    {
                        parent = parent.Parent as TreeNode;
                    }
                }
                else
                {
                    item += charP[j];
                    userItem += charU[j];
                }
            }
            tv.Nodes.Add(root);
        }






字符串格式
{OA{
	综合行政{
		考勤管理{
			工作时间设定{
				保存,清空,修改,删除
				}
			上班签到签退{
				保存,清空,修改,删除
				}
			补签申请{
				保存,清空,修改,删除
				}
			请假申请{
				保存,清空,修改,删除
				}
			外出申请{
				保存,清空,修改,删除
				}
			加班申请{
				保存,清空,修改,删除
				}
			出差申请{
				保存,清空,修改,删除
				}
			考勤检索{
				检索,导出,打印,删除
				}
			我的考勤申请{
				检索,导出,打印,删除
				}
			待审核申请{
				保存,清空,修改,删除,审核,拒审
				}
			已审批申请{
				检索,导出,打印,删除
				}
			}
		会议管理
			{
			会议室{
				检索,导出,打印,删除
				}
			会议申请{
				保存,清空,修改,删除
				}
			会议通知{
				检索,导出,打印,删除
				}
			会议记录{
				检索,导出,打印,删除
				}
			会议室检索{
				检索,导出,打印,删除
				}
			会议申请检索{
				检索,导出,打印,删除
				}
			会议通知检索{
				检索,导出,打印,删除
				}
			会议记录检索{
				检索,导出,打印,删除
				}
			会议决议{
				检索,导出,打印,删除
				}
			待审核会议{
				检索,导出,打印,删除,审核,拒审
				}
			已审核会议{
				检索,导出,打印,删除
				}
			}
		车辆管理{
			添加车辆{
				保存,清空,修改,删除
				}
			用车申请{
				保存,清空,修改,删除
				}
			加油记录{
				检索,导出,打印,删除
				}
			维修记录{
				检索,导出,打印,删除
				}
			保养记录{
				检索,导出,打印,删除
				}
			年检记录{
				检索,导出,打印,删除
				}
			保险记录{
				检索,导出,打印,删除
				}
			违章记录{
				检索,导出,打印,删除
				}
			事故记录{
				检索,导出,打印,删除
				}
			车辆检索{
				检索,导出,打印,删除
				}
			车花费检索{
				检索,导出,打印,删除
				}
			我的申请{
				保存,清空,修改,删除
				}
			待审核车辆{
				检索,导出,打印,删除,审核,拒审
				}
			已审核车辆{
				检索,导出,打印,删除
				}
			车辆预警{
				检索,导出,打印,删除
				}
			}
		办公用品{
			入库记录{
				检索,导出,打印,删除
				}
			用品档案{
				检索,导出,打印,删除
				}
			用品分类{
				检索,导出,打印,删除
				}
			用品检索{
				检索,导出,打印,删除
				}
			分类检索{
				检索,导出,打印,删除
				}
			领用记录{
				检索,导出,打印,删除
				}
			用品申请{
				保存,清空,修改,删除
				}
			库存检索{
				检索,导出,打印,删除
				}
			入库检索{
				检索,导出,打印,删除
				}
			领用检索{
				检索,导出,打印,删除
				}
			我的用品申请{
				保存,清空,修改,删除
				}
			待审核用品{
				保存,清空,修改,删除,审核,拒审
				}
			已审核用品{
				检索,导出,打印,删除
				}
			缺货预警{
				检索,导出,打印,删除
				}	
			}
		图书管理{
			图书分类{
				检索,导出,打印,删除
				}
			图书登记{
				保存,清空,修改,删除
				}
			借阅登记{
				保存,清空,修改,删除
				}
			返还登记{
				保存,清空,修改,删除
				}
			图书检索{
				检索,导出,打印,删除
				}
			借阅检索{
				检索,导出,打印,删除
				}
			返还检索{
				检索,导出,打印,删除
				}
			}
	    固定资产管理{
			资产类别{
				检索,导出,打印,删除
				}
			折旧类别{
				检索,导出,打印,删除
				}
			资产登记{
				保存,清空,修改,删除
				}
			资产检索{
				检索,导出,打印,删除
				}
			折旧检索{
				检索,导出,打印,删除
				}
			}	
		}
	信息发布{
		公告
		   {
		    	发布公告{
				保存,清空,修改,删除
				}
		    	已发公告{
				检索,导出,打印,删除
				}
		    	已收公告{
				检索,导出,打印,删除
				}
			待审核公告{
				检索,导出,打印,删除,审核,拒审
				}
			已审核公告{
				检索,导出,打印,删除
				}
			公告收藏{
				检索,导出,打印,删除,收藏
				}
			草稿箱{
				检索,导出,打印,删除,放入草稿箱
				}
		   }
		通知
		   {
		    	发布通知{
				保存,清空,修改,删除
				}
			已发通知{
				检索,导出,打印,删除
				}
			已收通知{
				检索,导出,打印,删除
				}
			待审核通知{
				检索,导出,打印,删除,审核,拒审
				}
			已审核通知{
				检索,导出,打印,删除
				}
			通知收藏{
				检索,导出,打印,删除,收藏
				}
			草稿箱{
				检索,导出,打印,删除,放入草稿箱
				}
	           }
		 }	
	任务管理{
		新建任务{
			保存,清空,修改,删除
			}
		任务跟踪{
			检索,导出,打印,删除
			}
		任务打分{
			保存,清空,修改,删除
			}
		任务检索{
			检索,导出,打印,删除
			}
		已点评任务检索{
			检索,导出,打印,删除
			}
		}

	目标管理
		{
		目标拟定{
			保存,清空,修改,删除
			}
		目标检索{
			检索,导出,打印,删除
			}
		我的目标{
			检索,导出,打印,删除
			}
		待审核目标{
			检索,导出,打印,删除,审核,拒审
			}
		已审核目标{
			检索,导出,打印,删除
			}
		目标检查{
			检索,导出,打印,删除,审核,拒审
			}
		}
	}
}

//设定生成树的原始数据 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、付费专栏及课程。

余额充值