以下是完整代码 附件中是数据表
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>();
}
}
分享到:
相关推荐
WinForm_TreeView递归绑定Demo,可以参考如何时候递归实现TreeView的绑定
在这个“winform,treeview数据库绑定数据类Demo”中,我们将探讨如何利用C#编程语言和.NET Framework将数据库中的数据绑定到TreeView控件上,特别是基于id、name和parent_id字段来构建层级关系。 首先,让我们理解...
在.NET Framework中,`TreeView`控件是一种常用的数据可视化组件,用于展示层次结构数据,比如文件系统、组织结构等。本篇文章将详细讲解如何在C#中使用递归方法为`TreeView`添加子节点,特别是在处理文件夹结构时。...
总结来说,动态加载TreeView控件的值是Windows Forms开发中常见的任务,主要涉及数据库查询、数据绑定和递归算法的应用。通过这些技术,我们可以构建出能够灵活反映数据库结构的用户界面,提高用户体验。
这个项目"**C# TreeView无限递归绑定 CheckBox(vs2010)可运行**"是为了演示如何在`TreeView`中添加具有复选框功能的节点,并实现无限递归绑定数据,这对于创建可以展开/折叠并支持多选的复杂数据结构非常有用。...
在本教程中,我们将探讨如何在VS2008环境下,结合SQLServer2000数据库,实现TreeView控件的无限级数据绑定。 首先,我们来看`TtreeView`(可能是打字错误,应为`TreeView`)控件的基本使用。TreeView控件由节点...
对于TreeView控件,这意味着我们可以将层次结构的数据结构(如目录结构、组织架构或数据库表)映射到树状视图中,使用户能够直观地查看和操作这些数据。 常规的数据绑定通常涉及以下步骤: 1. **定义数据源**:这...
在C# Windows Forms开发中,`TreeView`控件是一个常用且功能强大的组件,它能够以树形结构展示数据,非常适合用于表示层次结构的信息。本文将深入探讨如何实现`TreeView`控件的多层动态绑定,以帮助开发者更好地理解...
在Windows Forms(Winform)开发中,`TreeView`...综上所述,`Winform TreeView`控件结合递归数据结构和事件处理,可以轻松实现无限分级的数据绑定和用户选择的获取。这种技术在各种需要展示层级关系的场景中非常实用。
`TreeView`无限级别绑定的核心在于递归地处理数据和DOM元素。当数据结构为树形时,每一级节点可能有多个子节点,而这些子节点本身又可能有子节点,如此层层嵌套,形成一棵树。为了在界面上正确地展示这棵树,并且...
在Windows Forms(Winform)应用程序开发中,常常需要与用户交互并处理数据,XML作为一种轻量级的数据存储和交换格式,被广泛应用于各种场景。"winform treeview XML 编辑器"是一个专为Winform设计的工具,它结合了...
总结起来,这个例子展示了如何在Winform环境中利用数据绑定和递归算法从节点列表生成树形视图,这对于任何需要展示层次结构数据的项目都非常有用。通过对提供的"TreeTest"文件进行研究,开发者可以学习到数据驱动UI...
在C# WinForm开发中,树形菜单(TreeView)是一种常用的数据展示控件,它可以将层级结构的数据以直观的方式呈现给用户。本知识点主要聚焦于如何将数据从数据库读取并绑定到TreeView控件上,实现数据的动态加载和显示...
在C# WinForm开发中,`TreeView`控件是一个常用组件,用于展示层次结构的数据。在某些场景下,我们可能需要在`TreeView`节点上添加复选框(Checkbox),以便用户可以多选节点。本文将深入讲解如何实现`TreeView`控件...
在IT领域,特别是Web开发和GUI编程中,TreeView控件是一种常见的用户界面元素,用于展示层次结构的数据。本文将深入探讨如何根据ID和ParentID来绑定数据,从而生成一个能够直观展示层级关系的TreeView。 首先,我们...
在C# WinForm开发中,TreeView控件是一个非常常用且功能强大的组件,它允许用户以树状结构展示数据。这个控件通常用于显示文件系统、应用程序的层级结构或者自定义的分类信息。以下是对"C# WinForm窗体treeview用法...
2. BindTreeView 方法:该方法负责绑定 TreeView,包括获取数据、创建根节点、递归创建子节点。 3. CreateChildNode 方法:该方法负责递归创建子节点,根据父节点的值,获取子节点的数据,并创建子节点。 相关知识...
这个知识库主要关注如何在Winform应用程序中有效地利用`TreeView`控件来构建树型结构,并且如何遍历和读取与之绑定的数据。下面将详细介绍`TreeView`控件的基本概念、常用属性和方法,以及数据绑定和遍历的策略。 1...
通过学习这个实例,开发者可以更好地理解XML数据结构,掌握.NET Framework中的数据绑定机制,以及在WinForm应用中创建用户友好的数据操作界面。在实际开发中,可以根据需求扩展此示例,例如添加错误处理、XML数据...