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

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

  1. privatevoidMakeTree()
  2. {
  3. intmainid=0;
  4. DataTabledt=GetTable(mainid);
  5. try
  6. {
  7. if(dt!=null)
  8. {
  9. for(inti=0;i<dt.Rows.Count;i++)
  10. {
  11. stringt="|-"+dt.Rows[i]["DEPT_NAME"].ToString().Trim();
  12. stringv=dt.Rows[i]["ID"].ToString();
  13. ListItemli=newListItem(t,v);
  14. this.DropDownList1.Items.Add(li);
  15. AddSub(int.Parse(dt.Rows[i]["ID"].ToString()),0);
  16. }
  17. }
  18. }
  19. catch(Exceptionex)
  20. {
  21. Response.Write(ex.Message);
  22. }
  23. }
  24. privatevoidAddSub(intpID,intlevel)
  25. {
  26. DataTabledt=GetTable(pID);
  27. try
  28. {
  29. if(dt!=null)
  30. {
  31. for(inti=0;i<dt.Rows.Count;i++)
  32. {
  33. stringblank="| ";
  34. for(intm=1;m<=level;m++)
  35. {
  36. blank=blank+" ";
  37. }
  38. stringt=blank+"|-"+dt.Rows[i]["Dept_Name"].ToString();
  39. stringv=dt.Rows[i]["ID"].ToString();
  40. ListItemli=newListItem(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(Exceptionex)
  54. {
  55. Response.Write(ex.Message);
  56. }
  57. }

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

  1. privatevoidAddTreeNodes(intpID,TreeNodenode)
  2. {
  3. DataTabledt=GetTable(pID);
  4. try
  5. {
  6. if(dt!=null)
  7. {
  8. for(inti=0;i<dt.Rows.Count;i++)
  9. {
  10. TreeNodenodes=newTreeNode();
  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(Exceptionex)
  26. {
  27. Response.Write(ex.Message);
  28. }
  29. }
  30. protectedvoidMakeTree()
  31. {
  32. intmainid=0;
  33. DataTabledt=GetTable(mainid);
  34. try
  35. {
  36. if(dt!=null)
  37. {
  38. for(inti=0;i<dt.Rows.Count;i++)
  39. {
  40. TreeNodenodes=newTreeNode();
  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(Exceptionex)
  49. {
  50. Response.Write(ex.Message);
  51. }
  52. }
  53. privateDataTableGetTable(intrefid)
  54. {
  55. DataTabledt=newDataTable();
  56. BussinessDataAccessDBA=newBussinessDataAccess();
  57. try
  58. {
  59. dt=DBA.SelectDataBySql("SELECT*FROMUSER_ADDRESS_DEPTINFOWHEREParentId='"+refid+"'","tablename");
  60. }
  61. catch(Exceptionex)
  62. {
  63. Response.Write(ex.Message);
  64. }
  65. returndt;
  66. }

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

两种方式展示数据库中无限级树行结构_第1张图片

你可能感兴趣的:(数据结构)