C# 中采用treeview递归生成目录树(Winform和Webform两种)

摘要:
需要以部门为父节点显示不同部门下的课程。treeView1.Nodes[count].Name.Equals){treeView1.Nodes.Add;treeView1.ExpandAll();}}DataViewdv=newDataView;dv.RowFilter=“Dept_id=”+dr[“Dept_id”].ToString();Foreach{TreeNodeChildNode=newTreeNode();childNode.Text=drv[“Course_name”].ToString();childNode.name=drv“Course_id”].ToString();子节点.Tag=drv〔“Course_path”].TaString(();System.Diagnostics.Debug.WriteLine;node.Nodes.Add;treeView1。ExpandAll();}}webform使用treeview递归生成目录树私有evoidAddTree{foreach{//创建一个新节点TreeNode=newTreeNode();//将值node.Text=dr分配给当前节点[“Dept_name”].ToString();node.value=dr[“Dept.id”].ToString();//判断当前是否有根节点。如果没有根节点,则添加{TreeView1。节点。添加节点。展开=true;}否则{intcount=TreeView1。节点。计数-1;系统诊断。调试。WriteLine//判断当前节点是否已存在于树视图中。如果它不存在,则添加它。如果它已经存在,则不添加If(!

部门表:
C# 中采用treeview递归生成目录树(Winform和Webform两种)第1张

课程表:
C# 中采用treeview递归生成目录树(Winform和Webform两种)第2张


查询结果结构:
C# 中采用treeview递归生成目录树(Winform和Webform两种)第3张


数据结构分析,部门分为部门id和部门名称;课程分为课程id,课程名称,课程路径和课程所属部门。
要求以部门为父节点展示不同部门下的课程。

C# 中采用treeview递归生成目录树(Winform和Webform两种)第4张


Winform采用treeview递归生成目录树
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
private void AddTree(int d_id, DataTable dt, TreeNode PNode)
{
foreach (DataRow dr in dt.Rows)
{
TreeNode node = new TreeNode();
node.Text = dr["Dept_name"].ToString();
node.Name = dr["Dept_id"].ToString();
if (treeView1.Nodes.Count == 0)
{
treeView1.Nodes.Add(node);
treeView1.ExpandAll();
}
else
{
int count = treeView1.Nodes.Count - 1;
System.Diagnostics.Debug.WriteLine("TreeView1_Node = " + treeView1.Nodes[count].Name);
if (!treeView1.Nodes[count].Name.Equals(node.Name))
{
treeView1.Nodes.Add(node);
treeView1.ExpandAll();
}
}
DataView dv = new DataView(dt);
dv.RowFilter = "Dept_id = " + dr["Dept_id"].ToString();
foreach (DataRowView drv in dv)
{
TreeNode childNode = new TreeNode();
childNode.Text = drv["Course_name"].ToString();
childNode.Name = drv["Course_id"].ToString();
childNode.Tag = drv["Course_path"].ToString();
System.Diagnostics.Debug.WriteLine("childNode_Tag = " + childNode.Tag);
node.Nodes.Add(childNode);
treeView1.ExpandAll();
}
}
}


webform采用treeview递归生成目录树
private void AddTree(int d_id, DataTable dt, TreeNode PNode)
{
foreach (DataRow dr in dt.Rows)
{
//新建节点
TreeNode node = new TreeNode();
//给当前节点赋值
node.Text = dr["Dept_name"].ToString();
node.Value = dr["Dept_id"].ToString();
//判断当前是否存在根节点,不存在根节点,直接添加
if (TreeView1.Nodes.Count == 0)
{
TreeView1.Nodes.Add(node);
node.Expanded = true;
}
else
{
int count = TreeView1.Nodes.Count - 1;
System.Diagnostics.Debug.WriteLine("TreeView1_Node = " + TreeView1.Nodes[count].Text);
//判断treeview中是否已经存在当前结点(node.text),不存在则添加,已经存在则不添加
if (!TreeView1.Nodes[count].Text.Equals(node.Text))
{
TreeView1.Nodes.Add(node);
node.Expanded = true;
}
}
DataView dv = new DataView(dt);
//过滤得到按部门id分类的结果集
dv.RowFilter = "Dept_id = " + dr["Dept_id"].ToString();
//遍历过滤后的结果集
foreach (DataRowView drv in dv )
{
//新建子节点
TreeNode childNode = new TreeNode();
//childNode.Text = dt.Rows[i]["Course_name"].ToString();
//childNode.Value = dt.Rows[i]["Course_id"].ToString();
//childNode.NavigateUrl = dt.Rows[i]["Course_path"].ToString();
childNode.Text = drv["Course_name"].ToString();
childNode.Value = drv["Course_id"].ToString();
childNode.NavigateUrl = drv["Course_path"].ToString();
//将子节点添加到当前父节点下
node.ChildNodes.Add(childNode);
}
}

}
————————————————
版权声明:本文为CSDN博主「Goenken」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_35187039/article/details/82631107

免责声明:文章转载自《C# 中采用treeview递归生成目录树(Winform和Webform两种)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇海康威视摄像头密码重置【工具测试】Acunetix 11-登录后扫描的功能下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用Java实现二叉查找树

二叉查找树的实现 1. 原理   二叉查找树,又称为二叉排序树、二叉搜索树。对于树中每一个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。二叉查找树的平均深度为O(log N),搜索元素的时间复杂度也是O(log N)。是两种库集合类TreeSet、TreeMap实现的基础。 2. public API void mak...

Winform中使用控件名来查找窗体或者容器中的控件

在项目中经常遇到要动态生成控件,动态显示指定的控件或者隐藏,这就要涉及到查找控件的问题。 下面介绍下Winform中使用控件名来查找窗体或者容器中的控件的方法,代码如下: /// <summary>/// 通过控件名获取控件/// </summary>/// <param name="strName"></para...

获取TreeView 树中所选择的值

利用一个递归函数将TreeView中所选择的值 Add到一个List<String> 中 public static void GetTreeViewSelectItems(TreeView tree) { //リスト無効の場合 if (treeValLst == null) { //初始化 treeValLst = new List<s...

3.4.4 利用栈将递归转换成非递归的方法

在函数执行时系统需要设立一个“递归工作栈”存储第一层递归所需的信息,此工作栈是递归函数执行的辅助空间,所以可以看出,递归程序在执行时需要系统提供隐式栈这种数据结构来实现,对于一般的递归过程,仿照递归算法执行过程中递归工作栈的状态变化可直接写出相应的非递归算法。这种利用栈消除递归过程的步骤如下。 (1)设置一个工作栈存放递归工作记录(包括实参、返回地址及局部...

winform 以不规则图形背景显示窗体

一:创建一个winform窗体,把BackgroundImage引入一个不规则的图片,设置属性BackgroundImageLayout为Stretch 二:主要代码 using System; using System.Drawing; using System.Media; using System.Runtime.InteropServices; u...

C# WinForm获取当前路径汇总

Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏//获取当前进程的完整路径,包含文件名(进程名)。string str = this.GetType().Assembly.Location;result: X:xxxxxxxxx.exe (.exe文件所在的目录+.exe文件名)//获取新的Process 组件并将其与当前活动的进程关联的...