首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
star33375249 (2)
longrujun (66)
coofucoo (111)
EmilMatthew (74)
fancyhf (2)
yzsind (42)
qdzx2008 (52)
Kendiv (114)
btbtd (84)
soft_bird (8)
CSDN - 文档中心 - .NET 阅读:2081   评论: 4    参与评论
标题   不用第归算法快速显示树,对于Oracle数据库(2)     选择自 wangj2001 的 Blog
关键字   C#,TreeView,Oracle
出处  

namespace BQ_TreeView

{/// <summary>

    /// BQ_TreeView 的摘要说明

    /// </summary>

    public class BQ_TreeView : System.Windows.Forms.TreeView

    {

        private System.ComponentModel.Container components = null;

        private DataTable m_tb=null;

        private string m_RootMatID;

        BQ_TreeNode RootNode=null;

        ArrayList alNode=new ArrayList ();

        public BQ_TreeView()

        {

            InitializeComponent();

        }

        protected override void Dispose( bool disposing )

        {

            if( disposing )

            {

                if(components != null)

                {

                    components.Dispose();

                }

            }

            base.Dispose( disposing );

        }

 

        #region

        private void InitializeComponent()

        {

            components = new System.ComponentModel.Container();

        }

        #endregion

 

        /// <summary>

        ///定义数据源

        /// </summary>

        public DataTable TreeDataSource

        {

            set

            {

                m_tb=value;        

            }

        }

        /// <summary>

        ///清空所有树控件中的信息

        /// </summary>

        private void clear()

        {

            if(RootNode!=null)

            {

                RootNode.Nodes .Clear ();

                if(RootNode!=null)

                {

                    try

                    {

                        RootNode.Remove ();

                    }

                    catch

                    {}

                }

            }

            if(alNode!=null)

                if(alNode.Count >0)

                    alNode.Clear ();

        }

        /// <summary>

        /// 构造树控件

        /// </summary>

        public void MakeTree()

        {

            clear();//清除树节点中的资源

            Cursor.Current =Cursors.WaitCursor ;

            // 首先要给根节点付值,因为取出来的结构中没有根节点的信息

            RootNode=new BQ_TreeNode(m_RootMatID);

            RootNode.MatID =m_RootMatID;

            alNode.Add(RootNode);

            this.Nodes .Add (RootNode);

            foreach(DataRow row in m_tb.Rows )

            {

                BQ_TreeNode FNode=null;

                BQ_TreeNode CNode=null;

                CNode=MakeArray(row["ID"].ToString (),row["物料编码"].ToString (),out FNode);               

                FNode.Nodes.Add (CNode);               

            }

            RootNode.Expand ();

            Cursor.Current =Cursors.Default ;

        }

// <summary>

        /// 构造一个动态数组,模拟树控件一个分叉的线性结构,每一次都是最新的线性结构,这整个控件关键地方

        /// </summary>

        /// <param name="strID">层次</param>

        /// <param name="MatID">物料编码</param>

        /// <param name="nodeF">父节点</param>

        /// <returns>构造的节点</returns>

        private BQ_TreeNode MakeArray(string strID,string MatID,out BQ_TreeNode nodeF)  {

            try

            {

                BQ_TreeNode node=new BQ_TreeNode (MatID);          

                node.MatID =MatID;                                     

                BQ_TreeNode nodeRet=null;

                int nGrade=int.Parse (strID);

                if(nGrade==0)

                {

                }

                else

                {

                    if(alNode.Count>=nGrade+1)

                    {

                        alNode[nGrade]=node;

                        nodeRet=(BQ_TreeNode)alNode[nGrade-1];

                    }

                    else

                    {

                        alNode.Add (node);

                        nodeRet=(BQ_TreeNode)alNode[nGrade-1];

                    }

                }

                nodeF=nodeRet;

                return node;

            }

            catch(Exception e)

            {

                throw new Exception("",e);

            }

        }

        public string RootMatID

        {

            get

            {

                return m_RootMatID;

            }

            set

            {

                m_RootMatID=value;

            }

        }

    }

}

经过编译就可以把控件BQ_TreeView添加进来,如下图(图2

在应用程序中只要

编写

bQ_TreeView1.RootMatID=strRootID;

            bQ_TreeView1.TreeDataSource=tbProInfo;

            bQ_TreeView1.MakeTree();

就可以显示整个BOM结构,tbProInfo为上面的Sql语句取出的表结构

希望本文对于有同样需求的朋友有所帮助,有空再给大家实现SQLSver,我的Email:gangleader@126.com


相关文章
对该文的评论
dtqyhq ( 2004-05-10)
这种建树方法的关键是能构造出一个以树形结构排序的数据集来,算法本身没什么变化
tinkong ( 2004-03-11)
等待ASP.NET+ACCESS的出现!!!
jlbnet ( 2004-03-04)
等待 Delphi+SQL Server版
flymoon ( 2004-03-04)
作者相关文章: