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
  再調用以上類庫完成 
發佈了29 篇原創文章 · 獲贊 0 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章