目的:将数据库中的数据与树控件绑定
背景:我们想在树控件中显示销售客户的层级列表,这个销售客户的分层是这样的,先按“大区”,再按“省份”,最后到“客户”我们在数据库中建立了三个表,字段如下:
大区表:大区ID,大区名称
省份表:省份ID,省份名称,所属大区
客户表:客户ID,客户名称,所属省份
这三个表互相建立了关系

1、新建一个窗体,在窗体上放置两个控件,一个是Treeview,一个是Imagelist
2、设置这两个控件的属性在这里和第一小时唯一的区别是我们在Imagelist控件的设置时,导入了两个图标,一个KEY为K1,一个为K2,原来树控件的Node图标是可以变化的,我们准备某个项没有选中时的图标是一个没有打开的文件夹,选中时是一个打开的文件夹,以区别。
3、编写代码,如下:

Private Sub Form_Load()
'* -----------------------------------------------------------------
'* 用数据库表(查询也一样)中数据填充树控件
'* -----------------------------------------------------------------
    Dim Rec As New ADODB.Recordset
    Dim stRecQL As String
    Dim Item As Integer
    Dim i As Integer
    Dim nodindex As Node
'* -----------------------------------------------------------------
'* 定义各类
'* ----------------------------------------------------------------- 
   
    '设置最顶级的"爷"
'* ---------------------------
    Set nodindex = TreeView.Nodes.Add(, , "爷", "销售客户", "K1", "K2")
    nodindex.Sorted = True
'* -----------------------------------------------------------------
'*这里的设置跟第一小时里基本是一样的
'*但最后多了一个"K2"的参数,"K1"代表的是未被选中时的图标,"K2"代表是被选中后的图标
'*仔细观察一下,你会发现选中和没选中的图标是不一样的,一个是一个文件夹,一个是一个打开的文件夹
'* -----------------------------------------------------------------
    
    '设置第二级"父"
'* ---------------------------
    Rec.Open "大区表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
    For i = 0 To Rec.RecordCount - 1
        Set nodindex = TreeView.Nodes.Add("爷", tvwChild, "父" & Rec.Fields("大区ID"), Rec.Fields("大区名称"), "K1", "K2")
        nodindex.Sorted = True
        Rec.MoveNext
    Next
    Rec.Close
'* -----------------------------------------------------------------
'*第一行意思是打开一个表去寻找数据(查询也是可以的)
'*关键在与Add参数的变化
'*大家看第三个参数,在第一小时里,这里是"父1",这里用Rec.Fields("大区ID")来代替"1",意思是用表的编号来代替手工编号
'*第四个参数也是一样,直接用表中的名称字段来取代原来我们手工的命名
'* -----------------------------------------------------------------

'设置第三级"子"
'* ---------------------------
   Rec.Open "省份表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
    For i = 0 To Rec.RecordCount - 1
        Set nodindex = TreeView.Nodes.Add("父" & Rec.Fields("所属大区"), tvwChild, "子" & Rec.Fields("省份ID"), Rec.Fields("省份名称"), "K1", "K2")
        nodindex.Sorted = True
        Rec.MoveNext
    Next
    Rec.Close
'* -----------------------------------------------------------------
'*不用再解释了吧
'*要注意的是,定义第一个参数的时候,不是用"父" & Rec.Fields("大区ID"),而是用"父" & Rec.Fields("所属大区")
'*这个意思是:用省份表中关联大区表的字段,而不是直接用大区表的ID
'* -----------------------------------------------------------------

'设置第四级"孙"
'* ---------------------------
    
Rec.Open "客户表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
    For i = 0 To Rec.RecordCount - 1
        Set nodindex = TreeView.Nodes.Add("子" & Rec.Fields("所属省份"), tvwChild, "孙" & Rec.Fields("客户ID"), Rec.Fields("客户名称"), "K1", "K2")
        nodindex.Sorted = True
        Rec.MoveNext
    Next
    Rec.Close
    
'* -----------------------------------------------------------------
'*到此你应该完全明白了
'* -----------------------------------------------------------------

End Sub

第二小时结束

第三小时:将树控件与窗体结合
我们做树控件,当然不可能单单为了显示层级数据,我们希望跟窗体结合,当我们单击树控件中的某个客户时,窗体上能相应的转到这个客户的资料。

目的:将树控件与窗体结合
1、我们还是沿用第二个小时里的例子,但在建立窗体时,将窗体的数据来源设为“客户表”,并在窗体中放置好客户表的字段。
2、写入如下代码:

Private Sub Treeview_NodeClick(ByVal Node As Object)
'* -----------------------------------------------------------------
'*树控件的鼠标点击事件为NodeClick
'* -----------------------------------------------------------------
Dim str As String
'* -----------------------------------------------------------------
'*定义一个筛选
'* -----------------------------------------------------------------
If Node.Text = "销售客户" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
str = ""
'* -----------------------------------------------------------------
'*在第一小时里,我们说了Node有三个东西,图标,文本,索引值
'*文本就是text,索引值就是Key
'这里将就是说当我们点击"爷","父"或"子"层的时候,不筛选窗体
'*这个条件也可写成:If Node.key = "爷" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
'* -----------------------------------------------------------------
Else
str = "[客户名称]='" & Node.Text & "'"
End If
Me.Form.FilterOn = True
Me.Form.Filter = str
'*按指定的条件进行窗体筛选
End Sub

明白了吧,所谓结合窗体,实际不过是进行窗体筛选而已。第三小时结束(5分钟也够了,哈哈)

学习很有乐趣,但写文章却很无聊,如果你通过这篇文章学会了树控件的基本使用,跟个贴吧,也好让我有点成就感。

treeview调用数据库成树的更多相关文章

  1. 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  2. 织梦DedeCms用SQL语句调用数据库任意内容方法

    织梦DedeCms给我们提供了大量调用标签,供我们调用各种数据,但提供再多的标签,也有满足不了我们的时候,这时我们可以用SQL语句,灵活调用我们需要的内容. 如何任意调用数据库中的内容呢?先举个例子: ...

  3. 使用JDBC调用数据库的存储过程

    本篇讲述如何使用JDBC来调用MySQL数据库中的存储过程.建议在学习如何使用JDBC调用存储过程前,请先了解如何在数据库中使用存储过程. 存储过程是指在数据库系统中,一组为了完成特定功能的SQL语句 ...

  4. ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  5. java编程(1)——servlet和Ajax异步请求的接口编程(没有调用数据库的数据)

    编程应用背景: 使用HttpServlet接口来编写一个动态登录的接口(需要在Tomcat容器发布) 登录的 LoginSample 类代码: package com.zhang.java; publ ...

  6. 使用PHP中的ajax做登录页面、验证用户名是否可用、动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  7. C# EF框架调用数据库的函数

    1.在数据库中创建一个自定义函数: REATE FUNCTION [dbo].[f_IsOriginsDisabled] ( ), @needPPTV bit ) RETURNS bit AS BEG ...

  8. Mybatis调用数据库的存储过程和方法

     转载. https://blog.csdn.net/ml0228123/article/details/81002258   上次的项目,要求我用java代码调用存储过程,折腾了好久.最后总算成功了 ...

  9. 14.ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

随机推荐

  1. How to Find the Self Service Related File Location and Versions

     How to Find the Self Service Related File Location and Versions (文档 ID 781385.1) In this Document ...

  2. Fork And Join框架初探

    首先,关于Fork And Join框架的入门资料我觉得最好的是: Java线程(十一):Fork/Join-Java并行计算框架 本文参考了这篇文章 Fork/Join框架的核心类是ForkJoin ...

  3. Linux:ssh_config快速访问服务器

    在当前用户的根目录下: cd ~/.ssh vi config 编辑config内容为下面: ForwardAgent yes Host 1 Hostname 192.168.1.1 User roo ...

  4. HTTP 消息结构

    HTTP 消息结构 HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议. 一个HTTP"客户端"是一个应用程序(Web浏览 ...

  5. OJ题:句子逆转

    将一个英文语句以单词为单位逆序排放.例如"I am a boy",逆序排放后为"boy a am I"所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含 ...

  6. OC语言(七)Block复习

    看下面一道Block的面试题: int i = 10; void(^myBlock)() = ^{ NSLog(@"%d",i); }; i = 100; myBlock(); 经 ...

  7. Linux Shell 命令--rename

    重命名文件,经常用到mv命令,批量重命名文件rename是最好的选择,Linux的rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,判断方法:输入man rename 看到第 ...

  8. python3爬虫 - cookie登录实战

    http://blog.csdn.net/pipisorry/article/details/47948065 实战1:使用cookie登录哈工大ACM网站 获取网站登录地址 http://acm.h ...

  9. 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题

    . 参考界面 : 携程app首页的广告栏, 使用ViewPager实现        自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...

  10. Hibernate统计表中的条数

     /** * 判断积分日志表中是否有某个用户的注册日志 */@Transactional(propagation = Propagation.REQUIRED)public boolean isE ...