TreeView递归法动态添加节点

主要是连接数据库,然后用ViewState纪录dataset 对象,然后就开始调用递归动态从数据库中添加节点

/// <summary>
    /// 绑定TreeView
    /// </summary>
    private void BindTreeView()
    {
        tvDep.Nodes.Clear();
        Database db = DatabaseFactory.CreateDatabase();
        DbCommand cmd = db.GetStoredProcCommand("B_spDepartmentInfo");
        DataSet ds = db.ExecuteDataSet(cmd);
        this.ViewState["DataSet_Tree"]=ds;
        AddTree(0, (TreeNode)null);        //递归调用 

    }
   
    /// <summary>
    /// 递归添加树的节点
    /// </summary>
    /// <param name="ParentID">父节点的ID</param>
    /// <param name="pNode"></param>
    public void AddTree(int ParentID, TreeNode pNode)
    {
        DataSet DataSet_Tree =(DataSet)this.ViewState["DataSet_Tree"];
        DataView DataView_Tree = new DataView(DataSet_Tree.Tables[0]);
        DataView_Tree.RowFilter = "[ParentDepID]=" + ParentID;
        foreach (DataRowView row in DataView_Tree)
        {
            TreeNode Node = new TreeNode();
            if (pNode == null)  //添加根节点
            {
                Node.Text = row["DepName"].ToString()+"  (编码:"+row["DepCode"].ToString().Trim()+")";
                Node.Value = row["DepID"].ToString();
                tvDep.Nodes.Add(Node);
                Node.Expanded = true;
                AddTree(Int32.Parse(row["DepID"].ToString()), Node);    //再次递归
            }
            else
            {
                //添加当前节点的子节点
                Node.Text = row["DepName"].ToString() + "  (编码:" + row["DepCode"].ToString().Trim() + ")";
                Node.Value = row["DepID"].ToString();
                pNode.ChildNodes.Add(Node);
                Node.Expanded = true; //节点状态展开
                AddTree(Int32.Parse(row["DepID"].ToString()), Node);     //再次递归
            }
        }
    } 

posted @ 2008-08-26 10:30  MushRoom_lb  阅读(6525)  评论(10编辑  收藏  举报