关于TreeView(CS/BS)解决方案

以下是CS解決方案 

 /// <summary>
    ///  WinForm TreeView綁定
    /// </summary>
   public  class WinTree
    {        
        DataProvider DataProvider;        
        private string tableName;
        private string parentID;
        private string currID;
        private string text;
        private bool expand;
        /// <summary>
        /// 數據庫表名
        /// </summary>
        public string TableName
        {
            get
            { return tableName; }
            set
            { tableName = value; }
        }
        /// <summary>
        /// 父節點欄位
        /// </summary>
        public string ParentID
        {
            get
            { return parentID; }
            set
            { parentID = value; }
        }
        /// <summary>
        /// 當前節點(子節點)欄位
        /// </summary>
        public string CurrID
        {
            get
            { return currID; }
            set
            { currID = value; }
        }
        /// <summary>
        /// 文字顯示欄位
        /// </summary>
        public string Text
        {
            get
            { return text; }
            set
            { text = value; }
        }
        /// <summary>
        /// 是否全部展開(true/false)(默認為false)
        /// </summary>
        public bool Expand
        {
            get
            { return expand; }
            set
            { expand = value; }
        }
        public WinTree(IDbConnection dbconn)
        {            
            DataProvider = new DataProvider(dbconn);
        }
        /// <summary>
        /// 通過遞歸加載節點
        /// </summary>
        /// <param >TreeView 對象</param>
        /// <param >父節點的初始值,如("0")</param>
        public void GetTreeViewNode(TreeView tree, string parentID)
        {
            FillTree(tree, parentID, (TreeNode)null);
            if (Expand == true)
            {
                tree.ExpandAll();
            }
        }
        private void FillTree(TreeView tree, string AParentID, TreeNode pNode)
        {
            string SQL = "select * from " + TableName + "";
            // DataSet ds = DataProvider.GetDataSet(SQL);
            DataTable dt = DataProvider.GetDataTable(SQL);
            DataView dvTree = new DataView(dt);
            //過濾ParentID,得到當前的所有子節點          
            dvTree.RowFilter = ParentID + "=" + AParentID + "";
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                {
                    //添加根節點             
                    Node.Text = Row[Text].ToString();
                    Node.Tag = Row[CurrID].ToString();
                    tree.Nodes.Add(Node);
                    FillTree(tree, Row[CurrID].ToString(), Node);
                    //再次遞歸           
                }
                else
                {
                    //̀添加當前節點的子節點             
                    Node.Text = Row[Text].ToString();
                    Node.Tag = Row[CurrID].ToString();
                    //pNode.ChildNodes.Add(Node); 
                    pNode.Nodes.Add(Node);
                    FillTree(tree, Row[CurrID].ToString(), Node);
                    //再次遞歸             
                }
            }

        }
        /// <summary>
        /// 選擇加載節點
        /// </summary>
        /// <param >TreeView 對象</param>
        /// <param >父節點的初始值,如("0")</param>
        public void GetSelectTree(TreeView tree, string parentID)
        {
            tree.AfterSelect += new TreeViewEventHandler(tree_AfterSelect);
            string sql = "select * from " + TableName + " where  " + ParentID + "=" + parentID + "";
            DataTable dt = DataProvider.GetDataTable(sql);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                TreeNode node = new TreeNode();
                node.Text = dt.Rows[i][Text].ToString();
                node.Tag = dt.Rows[i][CurrID].ToString();
                tree.Nodes.Add(node);
            }
        }

        private void tree_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.GetNodeCount(false) == 0)
            {
                int cid = Convert.ToInt32(e.Node.Tag);
                string sql = "select * from " + TableName + " where " + ParentID + "=" + CurrID;
                DataTable dt = DataProvider.GetDataTable(sql);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    TreeNode node = new TreeNode();
                    node.Text = dt.Rows[i][Text].ToString();
                    node.Tag = dt.Rows[i][CurrID].ToString();
                    TreeNode treenode = (TreeNode)e.Node;
                    treenode.TreeView.SelectedNode.Nodes.Add(node);
                    treenode.TreeView.SelectedNode.Expand();
                }
            }

        }

    }

 

 

以下是Web結構爭決方案

 

/// <summary>
    /// Web TreeView綁定
    /// </summary>
    public class WebTree
    {
        DataProvider DataProvider;
        private string sql;
        private string id;
        private string parentID;
        private string valueNode;
        private string textNode;
        private string imageUrl;
        private string navigateUrl;
        private bool expanded;
        /// <summary>
        /// SQL語句
        /// </summary>
        public string SQL
        {
            get
            {
                return sql;
            }
            set
            {
                sql = value;
            }
        }
        /// <summary>
        /// 節點ID
        /// </summary>
        public string ID
        {
            get
            {
                return id;
            }
            set
            {
                }
        }
        /// <summary>
        /// 父節點ID(最頂層的節點如"000")
        /// </summary>
        public string ParentID
        {
            get
            {
                return parentID;
            }
            set
            {
                parentID = value;
            }
        }     
        /// <summary>
        /// 綁定到Value屬性節點的字段
        /// </summary>
        public string ValueNode
        {
            get
            {
                return valueNode;
            }
            set
            {
                valueNode = value;
            }
        }
        /// <summary>
        /// 綁定到Text屬性節點的字段
        /// </summary>
        public string TextNode
        {
            get
            {
                return textNode;
            }
            set
            {
                textNode = value;
            }
        }
        /// <summary>
        /// 綁定到ImageUrl屬性節點的字段
        /// </summary>
        public string ImageUrl
        {
            get
            {
                return imageUrl;
            }
            set
            {
                imageUrl = value;
            }
        }
        /// <summary>
        ///  綁定到NavigateUrl屬性節點的字段
        /// </summary>
        public string NavigateUrl
        {
            get
            {
                return navigateUrl;
            }
            set
            {
                navigateUrl = value;
            }
        }
        /// <summary>
        /// 是否展開(默認是false)
        /// </summary>
        public bool Expanded
        {
            get
            {
                if (expanded == true)
                {
                    return expanded = true;
                }
                else
                {
                    return expanded = false; 
                }
            }
            set
            {
                expanded = value;
            }
        }
        /// <summary>
        /// 构造函數
        /// </summary>
        /// <param >連接數據庫的字符串</param>
        public WebTree(IDbConnection dbConn)
        {
            DataProvider = new DataProvider(dbConn);  
        }
        /// <summary>
        /// 把數綁定到TreeView 
        /// </summary>
        /// <param >TreeView 的ID</param>
        public void GetTreeViewNode(TreeView tree)
        {
            FillTree(tree,ParentID,(TreeNode)null);           
        }
        /// <summary>
        /// 把數綁定到TreeView 
        /// </summary>
        /// <param >TreeView 的ID</param>
        /// <param >是否綁定NavigateUrl屬性</param>
        /// <param >是否綁定ImageUrl屬性</param>
        public void GetTreeViewNode(TreeView tree,bool navigateurl,bool imageurl)
        {
            if(navigateurl == true && imageurl == true)
            {
                FillTreeImageUrlNavigateUrl(tree, ParentID, (TreeNode)null);
            }
            if (navigateurl == true && imageurl == false)
            {
                FillTreeNavigateUrl(tree, ParentID, (TreeNode)null);
            }
            if (navigateurl == false && imageurl == true)
            {
                FillTreeImageUrl(tree, ParentID, (TreeNode)null);
            }
            if (navigateurl == false && imageurl == false)
            {
                FillTree(tree, ParentID, (TreeNode)null);
            }
           
        }   
        public void FillTree(TreeView tree, string AParentID, TreeNode pNode)
        {
            DataSet ds = DataProvider.GetDataSet(SQL);
            DataView dvTree = new DataView(ds.Tables[0]);
            //過濾ParentID,得到當前的所有子節點          
            dvTree.RowFilter = "ParentID ='" + AParentID + "'";
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                {
                    //添加根節點             
                    Node.Text = Row[TextNode].ToString();
                    Node.Value = Row[ValueNode].ToString();                   
                    tree.Nodes.Add(Node);
                    Node.Expanded = Expanded;
                    FillTree(tree, Row[ID].ToString(), Node);
                    //再次遞歸           
                }
                else
                {
                    //̀添加當前節點的子節點             
                    Node.Text = Row[TextNode].ToString();
                    Node.Value = Row[ValueNode].ToString();                    
                    pNode.ChildNodes.Add(Node);
                    Node.Expanded = Expanded;
                    FillTree(tree, Row[ID].ToString(), Node);
                    //再次遞歸             
                }
            } 
        }
        public void FillTreeNavigateUrl(TreeView tree, string AParentID, TreeNode pNode)
        {
            DataSet ds = DataProvider.GetDataSet(SQL);
            DataView dvTree = new DataView(ds.Tables[0]);
            //過濾ParentID,得到當前的所有子節點          
            dvTree.RowFilter = "ParentID ='" + AParentID + "'";
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                {
                    //添加根節點             
                    Node.Text = Row[TextNode].ToString();
                    Node.Value = Row[ValueNode].ToString();
                    Node.NavigateUrl = Row[NavigateUrl].ToString();
                    tree.Nodes.Add(Node);
                    Node.Expanded = Expanded;
                    FillTreeNavigateUrl(tree, Row[ID].ToString(), Node);
                    //再次遞歸           
                }
                else
                {
                    //̀添加當前節點的子節點             
                    Node.Text = Row[TextNode].ToString();
                    Node.Value = Row[ValueNode].ToString();
                    Node.NavigateUrl = Row[NavigateUrl].ToString();
                    pNode.ChildNodes.Add(Node);
                    Node.Expanded = Expanded;
                    FillTreeNavigateUrl(tree, Row[ID].ToString(), Node);
                    //再次遞歸             
                }
            }
        }
        public void FillTreeImageUrl(TreeView tree, string AParentID, TreeNode pNode)
        {
            DataSet ds = DataProvider.GetDataSet(SQL);
            DataView dvTree = new DataView(ds.Tables[0]);
            //過濾ParentID,得到當前的所有子節點          
            dvTree.RowFilter = "ParentID ='" + AParentID + "'";
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                {
                    //添加根節點             
                    Node.Text = Row[TextNode].ToString();
                    Node.Value = Row[ValueNode].ToString();
                    Node.ImageUrl = Row[ImageUrl].ToString();
                    tree.Nodes.Add(Node);
                    Node.Expanded = Expanded;
                    FillTreeImageUrl(tree, Row[ID].ToString(), Node);
                    //再次遞歸           
                }
                else
                {
                    //̀添加當前節點的子節點             
                    Node.Text = Row[TextNode].ToString();
                    Node.Value = Row[ValueNode].ToString();
                    Node.ImageUrl = Row[ImageUrl].ToString();
                    pNode.ChildNodes.Add(Node);
                    Node.Expanded = Expanded;
                    FillTreeImageUrl(tree, Row[ID].ToString(), Node);
                    //再次遞歸             
                }
            }
        }
        public void FillTreeImageUrlNavigateUrl(TreeView tree, string AParentID, TreeNode pNode)
        {
            DataSet ds = DataProvider.GetDataSet(SQL);
            DataView dvTree = new DataView(ds.Tables[0]);
            //過濾ParentID,得到當前的所有子節點          
            dvTree.RowFilter = "ParentID ='" + AParentID + "'";
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                {
                    //添加根節點             
                    Node.Text = Row[TextNode].ToString();
                    Node.Value = Row[ValueNode].ToString();
                    Node.ImageUrl = Row[ImageUrl].ToString();
                    Node.NavigateUrl = Row[NavigateUrl].ToString();
                    tree.Nodes.Add(Node);
                    Node.Expanded = Expanded;
                    FillTreeImageUrlNavigateUrl(tree, Row[ID].ToString(), Node);
                    //再次遞歸           
                }
                else
                {
                    //̀添加當前節點的子節點             
                    Node.Text = Row[TextNode].ToString();
                    Node.Value = Row[ValueNode].ToString();
                    Node.ImageUrl = Row[ImageUrl].ToString();
                    Node.NavigateUrl = Row[NavigateUrl].ToString();
                    pNode.ChildNodes.Add(Node);
                    Node.Expanded = Expanded;
                    FillTreeImageUrlNavigateUrl(tree, Row[ID].ToString(), Node);
                    //再次遞歸             
                }
            }
        }
    }

 

posted @ 2012-11-02 10:39  大漠飞鹰  阅读(136)  评论(0)    收藏  举报