ASP.NET无限级treeview控件、从数据库提取节点填充方案

        using System;
  using Microsoft.Web.UI.WebControls;
  using System.Data;
  namespace WebApplication1_del1
  {
   /// <summary>
   /// menuFill 的摘要说明。
   /// </summary>
   public class treeClass
   {
   public treeClass()
   {
   //
   // TODO: 在此处添加构造函数逻辑
   //
   }
   #region 树结构填充
   public bool buildTree( Microsoft.Web.UI.WebControls.TreeView TreeViewName,DataSet ds )
   {
   //清空所有节点
   TreeViewName.Nodes.Clear();
   //如果为最高级,则修改以适应ds的relation中的关系
   foreach(DataRow dbRow in ds.Tables[0].Rows)
   {
   if(dbRow["ParentMenu"].ToString()=="0")
   {
   dbRow["ParentMenu"]=DBNull.Value;
   }
   }
   ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["ChildMenuID"], ds.Tables[0].Columns["ParentMenu"]);
   //循环绑定父node
   foreach(DataRow dbRow in ds.Tables[0].Rows)
   {
   if(dbRow.IsNull("ParentMenu"))
   {
   Microsoft.Web.UI.WebControls.TreeNode newNode = CreateNode(dbRow["MenuName"].ToString(),dbRow["NavigateUrl"].ToString());
  
   TreeViewName.Nodes.Add(newNode);
   PopulateSubTree(dbRow, newNode);
   }
   }
   return true;
   }
   /// <summary>
   /// 循环绑定子node
   /// </summary>
   /// <param name="dbRow">dataset的行</param>
   /// <param name="node">需要添加的节点</param>
   private void PopulateSubTree(DataRow dbRow, Microsoft.Web.UI.WebControls.TreeNode node)
   {
   foreach (DataRow childRow in dbRow.GetChildRows("NodeRelation"))
   {
   Microsoft.Web.UI.WebControls.TreeNode childNode = CreateNode(childRow["MenuName"].ToString(),childRow["NavigateUrl"].ToString());
   node.Nodes.Add(childNode);
   PopulateSubTree(childRow, childNode);
   }
   }
   /// <summary>
   /// 给所有node附加属性
   /// </summary>
   /// <param name="text">呈现文本</param>
   /// <param name="imgUrl">URL</param></param>
   /// <returns>返回node</returns>
   private Microsoft.Web.UI.WebControls.TreeNode CreateNode(string text,string NavigateUrl)
   {
   Microsoft.Web.UI.WebControls.TreeNode node = new Microsoft.Web.UI.WebControls.TreeNode();
   /*
   * 其他node属性自己添加,现在只添加两个
   node.ID;
   node.ImageUrl;
   node.Target;
   node.Expanded;
   node.CheckBox
   * */
   node.Text = text;
   node.NavigateUrl=NavigateUrl;
   return node;
   }
   #endregion
   }
  }
  数据库设计方法:
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TreeTemp]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  drop table [dbo].[TreeTemp]
  GO
  CREATE TABLE [dbo].[TreeTemp] (
   [ChildMenuID] [int] IDENTITY (1, 1) NOT NULL ,
   [ChildMenu] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
   [NavigateUrl] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
   [ParentMenu] [int] NOT NULL
  ) ON [PRIMARY]
  GO
  注意:主键为“ChildMenuID”,默认值为0
  查询方法:
  Select * form TreeTemp
  再调用以上类库完成 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值