C# TreeView控件动态组树(可控制节点级别)

我不是女神ヾ 2022-07-26 00:02 309阅读 0赞

需求分析:

  1. 面对如此“强(wu)大(yu)”的需求,本菜鸟也是想尽办法做封装,来帮助深陷huohai的亲们。。我们的查询界面变成了树+下拉框+复选框,每个界面都有树,我就索性把树封装了,不同的界面,树所指引到的节点是不一样的,所以也要插入一个级别。

查询界面如下:

Center

当前树界面可以取到二级树,我就把级别参数传“2”就只显示到二级节点了。

代码如下:

  1. #region 加载全部国家-省-市-档案馆树--周洲--2016年4月3日9:22:16
  2. /// <summary>
  3. /// 动态加载树
  4. /// </summary>
  5. /// <param name="treeview">控件名称</param>
  6. /// <param name="jibie">树的级别</param>
  7. public void Alltree(TreeView treeview,int jibie)
  8. {
  9. List<jujibModel> julist = new List<jujibModel>();
  10. List<ArchiveModel> arlist = new List<ArchiveModel>();
  11. JujubBLL jubll = new JujubBLL();
  12. //查询所有的局级信息用来组树
  13. julist = jubll.QueryAllJu();
  14. //查询所有的档案馆信息用来组树
  15. arlist = jubll.QueryAllArchive();
  16. /*
  17. * 开始组树,如果jibie是2,直到二级树
  18. */
  19. //一级树状:国家档案局
  20. foreach (var guolist in julist)
  21. {
  22. if (guolist.Parent.ToString() == "1000000")
  23. {
  24. TreeNode guonode = new TreeNode();
  25. guonode.Text = guolist.Acode + "·" + guolist.Aname;
  26. guonode.ForeColor = Color.Blue;
  27. treeview.Nodes.Add(guonode);
  28. if (2 <= jibie)
  29. {
  30. //二级树状:省级档案局
  31. foreach (var shenglist in julist)
  32. {
  33. if (shenglist.Parent.ToString() == "4110001")
  34. {
  35. TreeNode shengnode = new TreeNode();
  36. shengnode.Text = shenglist.Acode + "·" + shenglist.Aname;
  37. shengnode.Name = shenglist.Id;
  38. shengnode.ForeColor = Color.Blue;
  39. guonode.Nodes.AddRange(new TreeNode[] { shengnode });
  40. if (3 <= jibie)
  41. {
  42. if (4 <= jibie)
  43. {
  44. //三级树状:加载省馆,放在第一个位置
  45. foreach (var guanlist in arlist)
  46. {
  47. if (guanlist.Citycode == shenglist.Id)
  48. {
  49. TreeNode guannode = new TreeNode();
  50. guannode.Text = guanlist.Acode + "·" + guanlist.Aname;
  51. shengnode.Nodes.AddRange(new TreeNode[] { guannode });
  52. }
  53. }
  54. }
  55. //三级树状:市级档案局
  56. foreach (var shilist in julist)
  57. {
  58. if (shilist.Parent.ToString() == shenglist.Id.ToString())
  59. {
  60. TreeNode shinode = new TreeNode();
  61. shinode.Text = shilist.Acode + "·" + shilist.Aname;
  62. shinode.ForeColor = Color.Blue;
  63. shengnode.Nodes.AddRange(new TreeNode[] { shinode });
  64. if (4 <= jibie)
  65. {
  66. //四级树状:各个档案馆
  67. foreach (var guanlist in arlist)
  68. {
  69. if (guanlist.Citycode.ToString() == shilist.Id.ToString())
  70. {
  71. TreeNode guancode = new TreeNode();
  72. guancode.Text = guanlist.Acode + "·" + guanlist.Aname;
  73. shinode.Nodes.AddRange(new TreeNode[] { guancode });
  74. }
  75. }
  76. }
  77. }
  78. }
  79. if (4 <= jibie)
  80. {
  81. //三级树状:特殊市当省对待,下面节点是各个馆
  82. if (shengnode.Nodes.Count <= 0)
  83. {
  84. foreach (var guanlist in arlist)
  85. {
  86. if (guanlist.Citycode.ToString() == shenglist.Id.ToString())
  87. {
  88. TreeNode guancode = new TreeNode();
  89. guancode.Text = guanlist.Acode + "·" + guanlist.Aname;
  90. shengnode.Nodes.AddRange(new TreeNode[] { guancode });
  91. }
  92. }
  93. }
  94. }
  95. }
  96. }
  97. }
  98. }
  99. }
  100. }
  101. }
  102. #endregion

调用树的语句(窗体加载的时候):

  1. #region 窗体加载 范晓权 2016年3月14日15:58:18
  2. private void Form1_Load(object sender, EventArgs e)
  3. {
  4. //周洲加树
  5. Alltree(tongjitree,2);

其他的例子:

  1. 如果我需要取到4级,当前北京市特殊,是直辖市,所以下属直接是4级的树,我代码里面也需要考虑这样的情况。还有一些计划单列市,我也要单独循环出来做判断。(下面就是四级树的样子)

调用语句:

  1. Alltree(tongjitree,4);

Center 1

总结:

1.自己要逻辑清楚,先写出自己的注释,,再写代码会比较容易一些。。

2.接触没有写过的东西,要去看帮助文档,介绍的都很详细。什么方法属性都可以得到。

发表评论

表情:
评论列表 (有 0 条评论,309人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JFace TreeViewer

     JFace中提供了TreeViewer组件,用TreeViewer来表示树型结构对象的显示。 TreeViewer功能比较强,它能定义节点、节点的显示标签、响应事件和显示图标