以下是完整代码 附件中是数据表
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的绑定
实现TreeView TreeNode递归添加文件夹 可以的话 给我好评论 谢谢啦
C# TreeView无限递归绑定 CheckBox(vs2010)可运行 C# TreeView无限递归绑定 CheckBox 加入 CheckBox 事件
数据库中存在各个节点的对应关系 然后通过递归方式将数据库中保存的节点信息添加至TreeView控件中。。。
代码中提供了用常规的方式绑定数据和使用递归进行数据绑定,大家一定要学会使用递归呀!递归方法比较简单,而且更常用。
《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础...实例229 将数据表中的字段添加到ComboBox 控件中 303 实例230 在ComboBox下拉列表中显示图片 304 实例231 用ComboBox控件制作浏览器 网址输入框 305 实例232...