不用第归算法快速显示树,对于Oracle数据库(2)

原创 2004年03月03日 11:37:00

namespace BQ_TreeView<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

{

/// <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

路径规划算法 快速搜索随机树(Rapid-exploration Random Tree)

机器人路径规划算法keyword A* 已讲解了 然后是rrt 快速搜索随机树(Rapid-exploration Random Tree)...
  • cai13160674275
  • cai13160674275
  • 2017年03月14日 19:49
  • 1387

路径规划-快速搜索随机树(Rapid-exploration Random Tree)

本节介绍机器人路径规划领域的一个重要的方法,快速搜索随机树法,这种方法在机器人规划领域,尤其是高维环境(机械臂,飞行器)的规划中,占有重要的位置,是基于采样的规划方法的一种。 一简介:     快...
  • junshen1314
  • junshen1314
  • 2016年12月26日 15:55
  • 2733

快速排序算法的时间复杂度为什么是O(NlogN),还有O(N^2)

转载自:http://www.cnblogs.com/pugang/archive/2012/07/02/2573075.html 经常听人谈起各种排序算法的时间复杂度,这个是O(n2)的,...
  • iihtd
  • iihtd
  • 2016年04月15日 15:37
  • 1839

我的软考之路(四)——数据结构与算法(2)之树与二叉树

上篇博文主要介绍的是数据结构的线性结构,我们这篇博文介绍非线性结构—树与二叉树,我先介绍树的一些基本概念,树的遍历,再介绍二叉树相关概念和特性,以及二叉树的遍历,最后再树与二叉树的对比,总结。    ...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年04月25日 08:16
  • 9555

手机号码归属地最新数据库2015年12月(附带采集更新程序)

手机号码归属地最新数据库2015年12月(附带采集更新程序) 转:http://www.duanmu.org/log/mobile/ 昨天发现数据库的手机号归属地判断不准确...
  • pzasdq
  • pzasdq
  • 2016年01月26日 15:46
  • 3607

为什么数据库使用B树索引而非散列索引

数据库
  • ingwfj
  • ingwfj
  • 2016年08月13日 00:53
  • 3000

模式识别(Pattern Recognition)学习笔记(二十七)-- 基于树搜索算法的快速近邻法

近邻法中计算距离需要遍历,带来很大的计算量和存储量,为了改善这两方面的性能,有人提出采用分枝界定算法(Branch-Bound  Algorithm)来改进近邻法,主要分为两个阶段:1)利用人工划分或...
  • eternity1118_
  • eternity1118_
  • 2016年06月15日 11:33
  • 1155

划分树几道题目

主要参考kuangbin博客 个人感觉划分树是基于快速排序的分治的思想,是把快速排序每个过程记录下来而已(借助快速排序也是可以快速求整个区间第k值的) 对于每个区间,找中间值比较分成两个子区间,再...
  • guognib
  • guognib
  • 2013年12月04日 14:04
  • 659

Oracle中快速导入导出数据库的几种方式

先,我们导入导出数据,肯定是要通过Oracle自带的可运行程序来完成数据的导入导出工作,imp.exe 和exp.exe这两个可运行文件都放在oracle安装目录下的BIN目录下。 一、以cmd...
  • Zhangxichao100
  • Zhangxichao100
  • 2017年04月06日 11:26
  • 3542

2维快速距离算法(Fast_Distance_2D)的解释

《Windows游戏编程大师技巧》中介绍了一个2维快速距离算法(Fast_Distance_2D)。但解释过于简单,本文试图对该算法做更详细解释。...
  • dcba62
  • dcba62
  • 2015年01月19日 21:22
  • 900
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不用第归算法快速显示树,对于Oracle数据库(2)
举报原因:
原因补充:

(最多只允许输入30个字)