首页  ·  知识 ·  编程语言
如何用数据库的数据动态产生TreeView
网友  博客园愚翁专栏  .NET  编辑:德仔   图片来源:网络
始现在好多方法都是先生成XML,然后在生成TreeView。其实,本身创建一个动态的TreeView并不是件很复杂的事。 &qu
始现在好多方法都是先生成XML,然后在生成TreeView。其实,本身创建一个动态的TreeView并不是件很复杂的事。
 
以下就具体说明,如何产生一个动态的树:
首先,为这个树先要获取数据,如下:
        private DataTable dtTree = null;
        private DataView dv = null;
 
        private void CreateTable()
        {
            dtTree = new DataTable( "TreeDBInfo" );
            dtTree.Columns.Add( new DataColumn( "TypeID", typeof(int) ) );
            dtTree.Columns.Add( new DataColumn( "TypeName", typeof(string) ) );
            dtTree.Columns.Add( new DataColumn( "TypeParentID", typeof(int) ) );
           
            dtTree.Rows.Add( new object[]{1, "Parent1", 0} );//'0' is that the type has no parent
            dtTree.Rows.Add( new object[]{2, "Parent2", 0} );
            dtTree.Rows.Add( new object[]{3, "Parent3", 0} );
            dtTree.Rows.Add( new object[]{ 4, "Child1", 1} );
            dtTree.Rows.Add( new object[]{ 5, "Child2", 1} );
            dtTree.Rows.Add( new object[]{ 6, "Child3", 2} );
            dtTree.Rows.Add( new object[]{ 7, "GrandChild1", 4} );
            dtTree.Rows.Add( new object[]{ 8, "GrandChild2", 4} );
            dtTree.Rows.Add( new object[]{ 9, "GrandChild3", 5} );
        }
 
       这是一个简单的属性结构,如果要从数据库读出的话,只要为dtTable指定为已经在DataSet填充好的Table即可,这里就不细说了。
 
       接下来,就是生成树的函数,如下:
        private void CreateTree()
        {
            dv = dtTree.DefaultView;
            dv.Sort = "TypeParentID ASC";
            DataRowView[] arrDRV = dv.FindRows( 0 );//Get root data info
            if( arrDRV.Length == 0 ) return;
 
            TreeNode tnNew = null;
            foreach( DataRowView drv in arrDRV )
            {
                tnNew = trvDBBinding.Nodes.Add( drv.Row["TypeName"].ToString() );
                tnNew.Tag = drv.Row["TypeID"].ToString();//Save "TypeID" in node's tag
                CreateTreeNode( ref tnNew );
            }
        }
 
        private void CreateTreeNode( ref TreeNode tnParent )
        {
            DataRowView[] arrDRV = dv.FindRows( tnParent.Tag );//Get children data info
            if( arrDRV.Length == 0 ) return;
 
            TreeNode tnNew = null;
            foreach( DataRowView drv in arrDRV )
            {
                tnNew = tnParent.Nodes.Add( drv.Row["TypeName"].ToString() );
                tnNew.Tag = drv.Row["TypeID"].ToString();//Save "TypeID" in node's tag
                CreateTreeNode( ref tnNew );
            }
        }
      
       简单调用如下:
            CreateTable();
            CreateTree();  
 
本文作者:网友 来源:博客园愚翁专栏
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读