两种方式展示数据库中无限级树行结构

下面介绍个人在开发中用到的两种无限级菜单的展示方式,第一种是将菜单放置到DropDownList控件中,这样直观明了,代码如下:

  1.     private void MakeTree()
  2.     {
  3.         int mainid = 0;
  4.         DataTable dt = GetTable(mainid);
  5.         try
  6.         {
  7.             if (dt != null)
  8.             {
  9.                 for (int i = 0; i < dt.Rows.Count; i++)
  10.                 {
  11.                     string t = "|- " + dt.Rows[i]["DEPT_NAME"].ToString().Trim();
  12.                     string v = dt.Rows[i]["ID"].ToString();
  13.                     ListItem li = new ListItem(t, v);
  14.                     this.DropDownList1.Items.Add(li);
  15.                     AddSub(int.Parse(dt.Rows[i]["ID"].ToString()), 0);
  16.                 }
  17.             }
  18.         }
  19.         catch (Exception ex)
  20.         {
  21.             Response.Write(ex.Message);
  22.         }
  23.     }
  24.     private void AddSub(int pID, int level)
  25.     {
  26.         DataTable dt = GetTable(pID);
  27.         try
  28.         {
  29.             if (dt != null)
  30.             {
  31.                 for (int i = 0; i < dt.Rows.Count; i++)
  32.                 {
  33.                     string blank = "| ";
  34.                     for (int m = 1; m <= level; m++)
  35.                     {
  36.                         blank = blank + " ";
  37.                     }
  38.                     string t = blank + "|- " + dt.Rows[i]["Dept_Name"].ToString();
  39.                     string v = dt.Rows[i]["ID"].ToString();
  40.                     ListItem li = new ListItem(t, v);
  41.                     this.DropDownList1.Items.Add(li);
  42.                     if (dt.Rows.Count > 0)
  43.                     {
  44.                         AddSub(int.Parse(dt.Rows[i]["ID"].ToString()), level + 1);
  45.                     }
  46.                     else
  47.                     {
  48.                         AddSub(int.Parse(dt.Rows[i]["Parentid"].ToString()), level + 1);
  49.                     }
  50.                 }
  51.             }
  52.         }
  53.         catch (Exception ex)
  54.         {
  55.             Response.Write(ex.Message);
  56.         }
  57.     }

第二种方式是帮定到TreeView控件中,代码如下:

  1. private void AddTreeNodes(int pID, TreeNode node)
  2.     {
  3.         DataTable dt = GetTable(pID);
  4.         try
  5.         {
  6.             if (dt != null)
  7.             {
  8.                 for (int i = 0; i < dt.Rows.Count; i++)
  9.                 {
  10.                     TreeNode nodes = new TreeNode();
  11.                     nodes.Text = dt.Rows[i]["Dept_Name"].ToString();
  12.                     nodes.Value = dt.Rows[i]["ID"].ToString();
  13.                     node.ChildNodes.Add(nodes);
  14.                     if (dt.Rows.Count > 0)
  15.                     {
  16.                         AddTreeNodes(int.Parse(dt.Rows[i]["ID"].ToString()), nodes);
  17.                     }
  18.                     else
  19.                     {
  20.                         AddTreeNodes(int.Parse(dt.Rows[i]["Parentid"].ToString()), nodes);
  21.                     }
  22.                 }
  23.             }
  24.         }
  25.         catch (Exception ex)
  26.         {
  27.             Response.Write(ex.Message);
  28.         }
  29.     }
  30.     protected void MakeTree()
  31.     {
  32.         int mainid = 0;
  33.         DataTable dt = GetTable(mainid);
  34.         try
  35.         {
  36.             if (dt != null)
  37.             {
  38.                 for (int i = 0; i < dt.Rows.Count; i++)
  39.                 {
  40.                     TreeNode nodes = new TreeNode();
  41.                     nodes.Text = dt.Rows[i]["DEPT_NAME"].ToString();
  42.                     nodes.Value = dt.Rows[i]["ID"].ToString();
  43.                     this.TreeView1.Nodes.Add(nodes);
  44.                     AddTreeNodes(int.Parse(dt.Rows[i]["ID"].ToString()), nodes);
  45.                 }
  46.             }
  47.         }
  48.         catch (Exception ex)
  49.         {
  50.             Response.Write(ex.Message);
  51.         }
  52.     }
  53.     private DataTable GetTable(int refid)
  54.     {
  55.         DataTable dt = new DataTable();
  56.         BussinessDataAccess DBA = new BussinessDataAccess();
  57.         try
  58.         {
  59.             dt = DBA.SelectDataBySql("SELECT * FROM USER_ADDRESS_DEPTINFO WHERE ParentId = '" + refid + "'""tablename");
  60.         }
  61.         catch (Exception ex)
  62.         {
  63.             Response.Write(ex.Message);
  64.         }
  65.         return dt;
  66.     }

还可以绑定到其他的的控件,如Menu,SiteMap控件等.数据库结构如下所示.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值