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

部门表:

课程表:

查询结果结构:

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

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

原文地址:https://www.cnblogs.com/ljs-13/p/12109165.html

时间: 2024-11-10 11:39:54

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

在DOS中利用Tree命令生成目录树

1.使用win+R键打开运行,然后打开cmd程序. 2.跳转到要打印目录结构所在的文件夹. 3.输入命令:tree /f >T1.txt T1.txt 是保存tree目录结构的文本文件. 最终结果:

python【使用简单的os.walk生成目录树】

思路比较简单,使用os.walk 生成目录信息,然后再进行字符串操作,所以没有其他比较复杂的逻辑,但是生成的效果也比较简单,自己看看到是可以哈. 代码如下 # -*- coding: utf-8 -*- ''' Created on July 22, 2017 @author: hehe1234567 ''' import os def simple_dir_tree(ddir): for dirpath,dirnames,filenames in os.walk(ddir.strip(os.s

生成目录树

文件目录树: tree D:\JabinDOC\工作文档 > tree.txt /f #使用cmd窗口执行 文件夹目录树: tree D:\JabinDOC\工作文档 > tree.txt #没有/f 原文地址:https://www.cnblogs.com/maoriaty/p/8423236.html

Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法

归并排序可以有两种思路----top-down 和 bottom-up top-down: 递归实现,将数组分成两半,分别处理:再合并. 伪代码如下: split ( A[], l, r) { if ( r - l < 2) return; m = (r + l) / 2; split ( A, l, m); //split A[l-m-1] split ( A, m, r); //split A[m-r-1] merge ( A, l, m, e); //merge A[l-m-1] and

在Activity中响应ListView内部按钮的点击事件的两种方法

转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在Activity中实现该接口,从而实现对点击事件的响应. 下班后思考了一下,觉得有两种方式都能比较好的实现:使用接口回调和使用抽象类回调. 正好可以复习一下接口和抽象类的区别,于是写了两个Demo: 1.

dos生成目录树

1. tree命令详解 [Tree命令作用] 以图形显示驱动器或路径的文件夹结构. [Tree命令格式] 在命令行窗口使用tree /?查看帮助. TREE [drive:][path] [/F] [/A] /F 显示每个文件夹中文件的名称.使用时显示所有目录及目录下的所有文件,省略时,只显示目录,不显示目录下的文件; /A 使用 ASCII 字符,而不使用扩展字符. 选用>PRN参数时,则把所列目录及目录中文件名打印输出 tree c:\ | more 出现由 tree 命令产生的第一个输出命

java从数据库读取菜单,递归生成菜单树

首先看一下菜单的样子 根据这个样子我们定义菜单类 public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon; // 菜单顺序 private int order; // 子菜单 private List<Menu> chi

newLISP 递归访问目录树

一个简单的递归函数,可以遍历目录树中的所有文件,传递另一个处理函数,该函数可以接受文件路径作为参数,从而决定如何处理. 下面是调用例子: #!/usr/bin/newlisp (load "file.lsp") (define (show-file file-path) (println (string file-path ": " (file-info file-path))) ) (FILE:recursive-access-dir "/opt/&qu

使用IO,递归打印目录树

package chengbaoDemo; import java.io.File; import java.io.IOException; public class TestIOFile { public static void main(String[] args) { File f = new File("D:/Project/java/Test"); printTreeFile(f, 0); } public static void printTreeFile(File fil