以下是完整代码 附件中是数据表
namespace treeview
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//窗体加载
private void Form1_Load(object sender, EventArgs e)
{
InitGroupTree();
}
//得到初始化的树
public void InitGroupTree()
{
treeView1.Nodes.Clear();
GroupNode rootGroupNode =GetGroupNode("e1f6d5dd-941e-4300-9644-700bc96a24f4");
TreeNode node = LoadTreeNode(rootGroupNode);
treeView1.Nodes.Add(node);
InitSubGroupTree(node, rootGroupNode);
node.Expand();
}
private TreeNode LoadTreeNode(GroupNode childGroupNode)
{
TreeNode childNode = new TreeNode();
childNode.Text = childGroupNode.GroupDO.GroupName;
childNode.Tag = childGroupNode.GroupDO.GroupId.ToString();
//childNode.ExpandAll();
return childNode;
}
private void InitSubGroupTree(TreeNode node, GroupNode groupNode)
{
foreach (var childGroupNode in groupNode.ChildGroups)
{
TreeNode childNode = LoadTreeNode(childGroupNode);
// node.ChildNodes.Add(childNode); web中
node.Nodes.Add(childNode);//winform中
InitSubGroupTree(childNode, childGroupNode);
}
}
public GroupNode GetGroupNode(string groupId)
{
GroupDO groupDO = GetRootNodeDO(groupId);
if (groupDO == null)
{
return null;
}
GroupNode groupNode = new GroupNode();
groupNode.GroupDO = groupDO;//得到根节点 (最顶级节点)
List<string> childGroupIds = GetChildGroupIds(groupId);
foreach (string childGroupId in childGroupIds)
{
groupNode.ChildGroups.Add(GetGroupNode(childGroupId));
}
return groupNode;
}
/// <summary>
/// Get the group by the group ID.
/// </summary>
/// <param name="groupId">The group ID.</param>
/// <returns>The GroupDO object.</returns>
public GroupDO GetRootNodeDO(string groupId)
{
string constring = "Data Source=.;Initial Catalog=CIMSystemDB;User ID=sa;password=123;";
string sql = "SELECT [GroupId],[GroupName],[Description],[GroupMgrId],[SuperGroupId] FROM [Group] WHERE [GroupId]=@GroupId";
SqlConnection conn = new SqlConnection(constring);
try
{
SqlParameter parameters = new SqlParameter("@GroupId", groupId);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
cmd.Parameters.Add(parameters);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dataTable = ds.Tables[0];
GroupDO groupDO = null;
if (dataTable != null && dataTable.Rows.Count > 0)
{
groupDO = new GroupDO();
foreach (DataRow dr in dataTable.Rows)
{
SetGroupDO(groupDO, dr);
}
}
return groupDO;
}
catch
{
MessageBox.Show("发生异常");
return null;
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}
public void SetGroupDO(GroupDO groupDO, DataRow dataRow)
{
groupDO.GroupId =dataRow["GroupID"].ToString();
groupDO.GroupName =dataRow["GroupName"].ToString();
groupDO.Description = dataRow["Description"].ToString();
groupDO.GroupMgrId = dataRow["GroupMgrID"].ToString();
groupDO.SuperGroupId =dataRow["SuperGroupID"].ToString();
}
/// <summary>
/// Get one level child group ID list.
/// </summary>
/// <param name="groupId">The group ID.</param>
/// <returns>The child group ID list.</returns>
public static List<string> GetChildGroupIds(string groupId)
{
string constring = "Data Source=.;Initial Catalog=CIMSystemDB;User ID=sa;password=123;";
SqlConnection conn=new SqlConnection(constring);
try
{
string sql = "SELECT [GroupID] FROM [Group] WHERE [superGroupID]=@GroupId AND GroupID<>@GroupId AND [Actived]=1 "
+ " ORDER BY [GroupName]";
SqlParameter parameters = new SqlParameter("@GroupId", groupId);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(parameters);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dataTable =ds.Tables[0];
List<string> childGroupIds = new List<string>();
if (dataTable != null)
{
foreach (DataRow dataRow in dataTable.Rows)
{
childGroupIds.Add(dataRow["groupID"].ToString());
}
}
return childGroupIds;
}
catch
{
MessageBox.Show("发生异常");
return null;
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}
}
}
//用到的两个类文件如下:
public class GroupDO
{
public string GroupId { get; set; }
public string GroupName { get; set; }
public string Description { get; set; }
public string GroupMgrId { get; set; }
public string SuperGroupId { get; set; }
}
public class GroupNode
{
public GroupDO GroupDO {get;set; }
public List<GroupNode> ChildGroups { get; set; }
public GroupNode()
{
ChildGroups = new List<GroupNode>();
}
}