日期:2014-05-20  浏览次数:21369 次

C# winform中怎么递归生成树
数据库中返回为Datatale类型,要生成一个节点树,根据这两个数据信息NodeId,FartherNodeId,生成节点树

------解决方案--------------------
递归你会不?
递归你会,这个肯定可以搞定。
“递归加载treeview” 可以搜索下


如果递归你不会 可以给你个代码参考 (估计多余)

C# code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

using 核心类.公用;
using 核心类.系统;
using 核心类.控件基类;
namespace 窗体控件
{
  public partial class 部门组织结构树控件窗体 : 插件窗体基类
  {
  public 部门组织结构树控件窗体()
  {
  InitializeComponent();
  }

  #region 对外属性
  public TreeView tvw_部门树
  {
  get{ return this._tvw_部门结构树; }
  }

  #endregion

  #region 自定义方法
  public void 初始化结构树()
  {
  this._tvw_部门结构树.Nodes.Clear();

  //获取组织关系模型类
  业务对象模型类 cls_模型类 = 全局环境类.获取模型类("Organ");
  业务对象模型类 cls_关系模型类 = 全局环境类.获取模型类("Organ Tree");
  if (cls_模型类 == null || cls_关系模型类 == null)
  return;

  List<组织信息类> lst_根部门 = 组织信息类.获取首个组织对象();
  if (lst_根部门 == null)
  return;

  foreach (组织信息类 cls_根部门信息 in lst_根部门)
  {
  TreeNode trn_根节点 = 形成树节点(cls_根部门信息);
  if (trn_根节点 != null)
  {
  trn_根节点.ImageIndex = 0;
  trn_根节点.SelectedImageIndex = 0;
  this._tvw_部门结构树.Nodes.Add(trn_根节点);
  递归加载组织结构(trn_根节点, cls_模型类, cls_关系模型类, cls_根部门信息);
  }
  }
  }

  private void 递归加载组织结构(TreeNode trn_父节点, 业务对象模型类 cls_模型类, 业务对象模型类 cls_关系模型类, 组织信息类 cls_组织信息)
  {
  List<组织信息类> lst_子组织对象 = null;
  关系管理泛型基类 cls_关系泛型基类 = new 关系管理泛型基类();
  cls_关系泛型基类.获取父对象关联的子(cls_组织信息, cls_关系模型类, cls_模型类, out lst_子组织对象);

  foreach (组织信息类 cls_子组织信息 in lst_子组织对象)
  {
  if (cls_子组织信息 == null)
  continue;

  TreeNode trn_子节点 = 形成树节点(cls_子组织信息);
  if (trn_父节点 == null)
  continue;

  trn_子节点.ImageIndex = 1;
  trn_子节点.SelectedImageIndex = 1;
  trn_父节点.Nodes.Add(trn_子节点);

  递归加载组织结构(trn_子节点, cls_模型类, cls_关系模型类, cls_子组织信息);
  }
  }

  private TreeNode 形成树节点(组织信息类 cls_组织对象)
  {
  if (cls_组织对象 == null)
  return null;

  TreeNode trn_组织节点 = new TreeNode(cls_组织对象.str_部门名称);
  trn_组织节点.Tag = cls_组织对象;
  trn_组织节点.ImageIndex = 0;

  return trn_组织节点;
  }

  #endregion
  }
}