如何用数据库的数据动态产生TreeView

起始现在好多方法都是先生成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();  

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值