1、在web.config文件中创建以下数据库连接字符串

<connectionStrings>
        <add name="NorthwindConnectionString" connectionString="Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>

2、在Treeview页面中添加以下代码

protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
    {
        if (e.Node.ChildNodes.Count == 0)
        {
            switch (e.Node.Depth)
            {
                case 0:
                    PopulateCategories(e.Node);
                    break;
                case 1:
                    PopulateProducts(e.Node);
                    break;
            }
        }
    }

当用户单击一个节点以打开该节点时,会调用此代码。因为需要在树的不同级别显示不同的数据,所以必须确定用户单击的节点深度,然后适当地填充该级别的节点。在此演练中,如果用户单击根节点(深度为 0),则调用 PopulateCategories 方法。如果用户单击类别名称(深度为 1),则调用 PopulateProducts 方法。这些方法在下一节中演示。
对象提供对当前节点的编程访问。若要填充节点,请向节点添加元素。在该代码示例中,节点被传递至方法,该方法将添加子节点。

void PopulateCategories(TreeNode node)
    {
        SqlCommand sqlQuery = new SqlCommand(
            "Select CategoryName, CategoryID From Categories");
        DataSet resultSet;
        resultSet = RunQuery(sqlQuery);
        if (resultSet.Tables.Count > 0)
        {
            foreach (DataRow row in resultSet.Tables[0].Rows)
            {
                TreeNode NewNode = new
                    TreeNode(row["CategoryName"].ToString(),
                    row["CategoryID"].ToString());
                NewNode.PopulateOnDemand = true;
                NewNode.SelectAction = TreeNodeSelectAction.Expand;
                node.ChildNodes.Add(NewNode);
            }
        }
    }

该代码创建 对象,该对象封装查询的文本。代码将该对象传递至一个随后将要编写的方法,该方法执行数据库查询,并返回 对象。此代码然后遍历 DataSet 对象中的记录,并为每条记录创建一个新的节点,以数据库信息设置该节点的文本和值。然后,代码将每个节点的 属性设置为 true,以使节点在被单击时将引发其 TreeNodePopulate 事件。 属性被设置,以使节点在默认情况下展开。

第二级别的节点将显示每个类别的产品。由于此原因,填充产品节点需要参数化查询,以使您能够检索当前类别的产品,并以恰当方式填充子节点。

void PopulateProducts(TreeNode node)
    {
        SqlCommand sqlQuery = new SqlCommand();
        sqlQuery.CommandText = "Select ProductName From Products " +
            " Where CategoryID = @categoryid";
        sqlQuery.Parameters.Add("@categoryid", SqlDbType.Int).Value =
            node.Value;
        DataSet ResultSet = RunQuery(sqlQuery);
        if (ResultSet.Tables.Count > 0)
        {
            foreach (DataRow row in ResultSet.Tables[0].Rows)
            {
                TreeNode NewNode = new
                    TreeNode(row["ProductName"].ToString());
                NewNode.PopulateOnDemand = false;
                NewNode.SelectAction = TreeNodeSelectAction.None;
                node.ChildNodes.Add(NewNode);
            }
        }
    }

此代码与用以填充类别节点的代码类似。不同之一是 SqlCommand 对象配置有一个参数,在运行时,以用户单击的节点(即选择的类别)的值来设置该参数。另一不同之处是 PopulateOnDemand 属性设置为 false。这导致产品节点显示后不带有展开按钮,这是必须的,因为产品下再没有节点。

private DataSet RunQuery(SqlCommand sqlQuery)
    {
        string connectionString =
            ConfigurationManager.ConnectionStrings
            ["NorthwindConnectionString"].ConnectionString;
        SqlConnection DBConnection =
            new SqlConnection(connectionString);
        SqlDataAdapter dbAdapter = new SqlDataAdapter();
        dbAdapter.SelectCommand = sqlQuery;
        sqlQuery.Connection = DBConnection;
        DataSet resultsDataSet = new DataSet();
        try
        {
            dbAdapter.Fill(resultsDataSet);
        }
        catch
        {
            labelStatus.Text = "Unable to connect to SQL Server.";
        }
        return resultsDataSet;
    }

在 TreeView 控件中显示分层数据相关推荐

  1. listview显示mysql数据_C#在listview控件中显示数据库数据

    一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 ...

  2. 在 Web 数据控件中显示二进制数据54

    简介 前面的教程中 , 我们介绍了将二进制数据与应用程序的基础数据模型相关联的两种方法 , 并使用FileUpload 控件从浏览器向 Web 服务器的文件系统上载.我们还将了解怎样将上载的二进制数据 ...

  3. C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标

    在C#系统应用毕设U盘防御软件中需要实现文件不可恢复的删除,首先需要实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录并加载相应图标.显示结果 ...

  4. [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹

    原文 张丹-小桥流水,C#2010 在TreeView控件下显示路径下所有文件和文件夹 C#2010学习过程中有所收获,便总结下来,希望能给和我一样在学习遇到困难的同学提供参考. 本文主要介绍两个自定 ...

  5. 在 DataList 或 Repeater 控件中分页报表数据44

    简介 在在线应用程序中显示数据时,分页和排序是两个非常常见的功能.例如,在一个在线书店搜寻 ASP.NET 书籍时,可能会有数以百计种这样的图书,但在报表的每页只列出十个匹配的搜索结果.而且,搜索结果 ...

  6. 递归遍历文件夹,并添加到TreeView控件中

    遍历文件夹,并把所有节点增加到TreeView控件中,这里单独写成了一个静态类,传入根目录节点和指定的目录这两个参数即可,可以稍作扩展用于其他方案 View Code 1 using System; ...

  7. Android kotlin 将Base64字符串转换成Bitmap,并在jetpack compose的Image控件中显示

    Android kotlin 将Base64字符串转换成Bitmap 前言 代码 将Base64字符串转换成Bitmap 在jetpack compose的Image控件中显示Bitmap 完事 前言 ...

  8. Visual C# 2005 - 如何于DataGridView控件中以跨数据行方式显示数据

    <?XML:NAMESPACE PREFIX = O /> 图表1 一般来说,每一个字段的内容会单独显示于DataGridView控件的一个数据行中.问题是,某些字段拥有大量文字数据,我是 ...

  9. [WTL/ATL]_[初级]_[TreeView控件如何显示ToolTip]

    场景 在开发界面程序时,CTreeViewCtrl(它实际内部封装的就是Win32的TreeView控件)一般会用来作为选择某些类型的树形菜单,点击某项的时候,右边能显示某些对应的数据.当这个控件的宽 ...

最新文章

  1. 内存分配器memblock【转】
  2. python 安装opencv linux opencv 查看版本
  3. Linux系统基础知识
  4. PHP 对象 多态性
  5. AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront(二)
  6. sqlserver 当月、 时间_SQLServer取系统当前时间
  7. 最简单的 Django 教程
  8. 解决微信网页授权多个域名(大于两个)
  9. 华为太极magisk安装教程_【玩机必会技能】小米手机通用刷TWRP RECOVERY|ROOT|刷第三方ROM教程...
  10. 大众-OBD-接口位置
  11. 黑鲨手机计算机科学技术器,黑鲨4Pro将PC的SSD存储科技带到手机端,真技术革命还假营销噱头?...
  12. 蘑菇云「行空板Python入门教程」第七课:舒尔特方格小游戏
  13. SSM上传用户头像。解决HTTP 400,保存到本地以及数据库保存路径,在页面显示的问题
  14. 计算机科学与技术和工业设计,浙江大学计算机科学与技术学院柴春雷副教授带你逛工业设计专业...
  15. 神经性疼痛的表现是什么,神经性疼痛常见部位是
  16. 《大规模元搜索引擎技(1)》一第1章 绪言
  17. IOS 发布被拒 PLA 1.2问题 整个过程介绍 03 个人账户升级公司账户
  18. Windows邮件服务器hMailServer,网页管理平台WEBADMIN搭建
  19. react 函数组件暴露方法
  20. 遇到爬虫、接口盗刷怎么办?反爬虫组件来助你

热门文章

  1. 超全PHP学习资源整理:入门到进阶系列
  2. 卡耐基大学计算机专业分类,卡内基梅隆大学计算机专业
  3. 单片机设置12分频c语言,AT89C51单片机,如何实现延迟一秒
  4. php找不到gearmanClent类,centos 使用docker搭建Gearman任务分发系统 ,Gearman的安装和使用...
  5. SpringSecurity使用自定义认证页面
  6. RabbitMQ单个发布确认
  7. 探究Jvm源码实现-MarkWord
  8. MyBatis 缓存详解-第三方缓存做二级缓存
  9. HDFS的Secondarynamenode工作机制
  10. Spring Session源码解析