使用TreeView控件做无限级分类

最近需要做无限级分类,在网上看了好多例子都不怎么具体,因此小结一下,写个详细点的例子.第一次发文章,希望大家不要见笑.

 

1.数据库设计

 create table TreeTemp
(
 ChildMenuID int identity,
 ParentMenu int,
 MenuName varchar(50),
)

本例的数据:

ChildMenuID ParentMenu MenuName

100
2101
3102
4103
530201
620102
79010101
840301
920101
1040302
116010201

 

2.代码部分,新建一个TreeView类,写入如下代码:

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Web.UI.HtmlControls;
  10. using System.Data.SqlClient;
  11. /// <summary>
  12. /// TreeView 的摘要说明
  13. /// </summary>
  14. public class TreeClass
  15. {
  16.     public TreeClass()
  17.     {
  18.         //
  19.         // TODO: 在此处添加构造函数逻辑
  20.         //
  21.     }
  22.     /// <summary>
  23.     /// 绑定跟节点
  24.     /// </summary>
  25.     /// <param name="TreeViewName">TreeView控件</param>
  26.     /// <param name="ds">数据集DateSet</param>
  27.     /// <returns></returns>
  28.     public static  bool buildTree(System.Web.UI.WebControls.TreeView TreeViewName, DataSet ds)
  29.     {
  30.         TreeViewName.Nodes.Clear();
  31.         ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["ChildMenuID"], ds.Tables[0].Columns["ParentMenu"],false);
  32.         
  33.         foreach (DataRow dbrow in ds.Tables[0].Rows)
  34.         {
  35.             if(Convert.ToString(dbrow["ParentMenu"])=="0")
  36.             {
  37.                 TreeNode newNode = CreateNode(dbrow["MenuName"].ToString());
  38.                 TreeViewName.Nodes.Add(newNode);
  39.                 ChildTree(dbrow, newNode);
  40.             }
  41.         }
  42.         return true;
  43.     }
  44.     /// <summary>
  45.     /// 循环绑定子节点
  46.     /// </summary>
  47.     /// <param name="dbrow"></param>
  48.     /// <param name="node"></param>
  49.     private static void ChildTree(DataRow dbrow, System.Web.UI.WebControls.TreeNode node)
  50.     {
  51.         foreach (DataRow childRow in dbrow.GetChildRows("NodeRelation"))
  52.         {
  53.             TreeNode childNode = CreateNode(childRow["MenuName"].ToString());
  54.             node.ChildNodes.Add(childNode);
  55.             ChildTree(childRow, childNode);
  56.         }
  57.     }
  58.     /// <summary>
  59.     /// 设置节点属性
  60.     /// </summary>
  61.     /// <param name="text"></param>
  62.     /// <param name="NavigateUrl"></param>
  63.     /// <returns>返回一个节点</returns>
  64.     private static System.Web.UI.WebControls.TreeNode CreateNode(string text)
  65.     {
  66.         TreeNode node = new TreeNode();
  67.         node.Text = text;
  68.         return node;
  69.     }
  70. }

在页面中调用此类即可实现功能.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值