TreeView数据绑定的方法(可实现无限递归)

本文介绍了一种使用递归算法从数据库中查询行政区划数据,并将其动态生成为TreeView的方法。通过SQL查询获取数据后,利用递归函数逐层构建树形结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据表为:

CREATE TABLE [dbo].[QuHua] (

 [ID] [int] IDENTITY (1, 1) NOT NULL ,--自增的标记列

 [NAME] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,--行政区划的名称

 [ParentID] [int] NOT NULL --行政区划的上一级区划ID,最高级区划的上一级默认为0

) ON [PRIMARY]

GO

 

---插入测试数据

Insert Into dbo.QuHua (NAME,ParentID) Values ('北京',0)

Insert Into dbo.QuHua (NAME,ParentID) Values ('山东',0)

Insert Into dbo.QuHua (NAME,ParentID) Values ('河北',0)

Insert Into dbo.QuHua (NAME,ParentID) Values ('海淀',1)

Insert Into dbo.QuHua (NAME,ParentID) Values ('中关村',4)

Insert Into dbo.QuHua (NAME,ParentID) Values ('济宁',2)

Insert Into dbo.QuHua (NAME,ParentID) Values ('曲阜',6)

Insert Into dbo.QuHua (NAME,ParentID) Values ('济南',2)

         /// <summary>

        /// 根据递归查询结果动态生成TreeView

        /// 由于算法效率问题,不适合数据量的情况

        /// </summary>

         private void CreateTreeView()

          {

             string connetion = "Data Source=. ;Initial Catalog=MIS_New;Integrated Security=True";

             using (SqlConnection cn = new SqlConnection(connetion))

              {

                 cn.Open();

                 SqlDataAdapter da = new SqlDataAdapter("select * from QuHua", cn);

                 DataTable dt = new DataTable();

                 da.Fill(dt);

                 //首先把第一级的行政区划取出生成TreeView的节点

                 //作为递归运算的入口

                 CreateTreeViewRecursive(treeView1.Nodes, dt, 0);

             }

 

         }

          /// <summary>

         /// 递归查询

         /// </summary>

         /// <param name="nodes">TreeView的节点集合</param>

         /// <param name="dataSource">数据源</param>

         /// <param name="parentid">上一级行政区划的标识码</param>

         private void CreateTreeViewRecursive(TreeNodeCollection nodes,DataTable dataSource,int parentid)

          {

             string filter;

             filter = string.Format("parentid={0}", parentid);

             DataRow[] drarr = dataSource.Select(filter);

             TreeNode node;

             foreach (DataRow dr in drarr)

              {

                 node = new TreeNode();

                 node.Text = Convert.ToString(dr["name"]);

                 node.Tag = Convert.ToString(dr["id"]);

                 nodes.Add(node);

                 CreateTreeViewRecursive(node.ChildNodes,dataSource,Convert.ToInt32(node.Tag));

             }

 

         }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值