treeview调用数据库成树

目的:将数据库中的数据与树控件绑定
背景:我们想在树控件中显示销售客户的层级列表,这个销售客户的分层是这样的,先按“大区”,再按“省份”,最后到“客户”我们在数据库中建立了三个表,字段如下:
大区表:大区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分钟也够了,哈哈)

 

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

 

转载于:https://www.cnblogs.com/ince/p/8983137.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绘制半圆_超细致:Ai绘制萌蠢可爱卡通形象

来源:Envato艺云台原文作者:Amanda Tepie 翻译:Yimin Zhou完成效果在这篇教程中,我将展示如何在Adobe Illustrator中使用基本图形工具、路径查找器、宽度和描边工具创建一个可爱的呆萌兽。完了你还可以利用这些技巧绘制其他卡通…

服务器系统装软路由,服务器系统设置软路由

服务器系统设置软路由 内容精选换一换无法正常使用Cloud-init。弹性云服务器获取Metadata的流程如图1所示:获取Metadata流程图您可以按照以下原因进行排查,如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。检查弹性云服务器是否…

Scrapy-redis实现分布式爬取的过程与原理

Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候…

0419 一些不错的UI作品,以后陆续更新

一些不错的UI作品,以后陆续更新 http://www.zcool.com.cn/u/35500/zcooler_art.xhtml 其它的部件质感,无非也是渐变,描边,内发光,内阴影等效果的组合,用到的技法也很基础,图层样式。个人觉得&am…

华为服务器如何登录修改密码,如何修改云服务器的登录密码

如何修改云服务器的登录密码 内容精选换一换本节为您介绍如何通过控制台提供的远程登录功能(即VNC方式)登录到弹性云服务器上。登录成功后,如需使用VNC界面提供的复制、粘贴功能,请参见后续处理。对于“密钥对”方式创建的Linux弹性云服务器,…

Lazarus安装使用

Lazarus安装使用 最后还是安装了Lazarus; 安装之后,新建了项目,还引入了Unit,就可以跑了; 学习:http://tieba.baidu.com/p/3164001113 program project1;uses DESCrypt;beginwriteln(32 or 16 or 8 or 0 or…

孪生再世代表数字几_《孪生双鱼座》

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼10门外一人矫步进入大厅,在众目睽睽之下毫不客气的坐在刑斌的身边。所有人站了起来,看是谁哪么大胆!是个女子,她开口道:“诸位前辈,奴家这向有理了。”“来者何…

云服务器有i5的性能吗,i5云服务器

i5云服务器 内容精选换一换查询指定后端云服务器组的后端云服务器。支持过滤查询和分页查询。如未特殊说明,匹配规则为精确匹配。GET /v2/{project_id}/elb/pools/{pool_id}/members无请求样例1 全量查询后端云服务器GET https://{Endpoint}/v2/1a3e005cf9ce40308c9…

asp.net 强制性单一登陆现实

本文章使用asp.net内置membership作为登陆操作 关于配置membership 不用说明了 网上都有的首先建立一个login页面 随便放一个login控件和loginstatus控件aspx代码<body><form id"form1" runat"server"><div><asp:Login ID"Lo…

windows下MongoDB的安装及配置

https://blog.csdn.net/heshushun/article/details/77776706 一、先登录Mongodb官网https://www.mongodb.com/download-center#community 下载 安装包。32、64位的都行。 二、安装MongoDB 下载后的安装包&#xff1a; 安装比较简单&#xff0c;类似于普通QQ软件&#xff0c;中…

C#软件试用实现方式

//共享软件都有试用期 private void Form1_Load(object sender, System.EventArgs e){RegistryKey RootKey,RegKey; //项名为&#xff1a;HKEY_CURRENT_USERSoftwareRootKey Registry.CurrentUser.OpenSubKey ("Software",true);//打开子项&#xff1a;HKEY_CURRE…

CSS3实现多样的边框效果

CSS3实现多样的边框效果 原文:CSS3实现多样的边框效果半透明边框 实现效果&#xff1a; 实现代码&#xff1a; <div> 你能看到半透明的边框吗&#xff1f; </div>div {/* 关键代码 */border: 10px solid rgba(255,255,255,.5);background: white;background-clip: …

解决mysql乱码问题_解决Mysql乱码问题_MySQL

bitsCN.com折腾了半天&#xff0c;在网上找了半天&#xff0c;终于解决了Mysql的乱码问题&#xff01;系统是Fedora15&#xff0c;通过sudo yum install mysql-server mysql-client后&#xff0c;修改/etc/my.cnf在[mysqld]下添加default-character-setutf8&#xff0c;重启mys…

python+selenium_浏览器引擎

import configparser import os.path from selenium import webdriver from basework.logger import Logger logger Logger(logger"BrowserEngine").getlog() class BrowserEngine(object): """浏览器引擎类""" # 注意相对路径获取方…

perl的几个for循环判断

#计算1到100的和foreach $i (1..100){$sum$sum$i;}print $sum."\n";#九九表$j1;for $i (1..9){for $j ($j..$i){print "$j"."x"."$i".$j*$i." " ;}print "\n";}#取出1到100内包含7的数和能被7增除的数字for (1..1…

mysql 导入json_JsonToMysql(json导入mysql数据库工具)

JsonToMysql是款功能强大的json导入mysql数据库工具&#xff1b;用户在进行开发数据库、或者完成对相关的数据库维护的时候&#xff0c;经常需要将JSON的数据导入到数据库里面&#xff0c;如果没有专业的工具&#xff0c;就会对您的时间浪费&#xff0c;也会对工作的效率影响&a…

证监会:《证券期货业信息安全保障管理办法(征求意见稿) 》公开征求意见...

2012年4月20日&#xff0c;证监会正式对外公布了《证券期货业信息安全保障管理办法&#xff08;征求意见稿&#xff09;》&#xff0c;并公开征求意见。正式公布后将取代原来在2005年发布的暂行办法。 证券期货业信息安全保障管理办法&#xff08;征求意见稿&#xff09;第一章…

lvs

LVS 服务器集群 lamp概念&#xff1a;LVS&#xff1a;Linux Virtual Server Linux虚拟服务器。将整个服务器集群虚拟成一台服务器&#xff08;Linux虚拟服务器&#xff09;VIP:是lvs这台机器上&#xff0c;面向公网的IP地址。用于接受客户端的请求。LVS接收到客户端的请求…

使用mysql事件_MySQL事件的使用详解

在系统管理或者数据库管理中&#xff0c;经常要周期性的执行某一个命令或者SQL语句。这个时候就会用到mysql事件&#xff0c;使用这个功能必须保证是mysql的版本是5.1以上。1.首先要查看事件是否开启了&#xff0c;SHOW VARIABLES LIKE event_scheduler;SELECT event_scheduler…

iPad 如何创建UISplitViewController应用程序

原文摘自&#xff1a;UISplitViewController的使用。UISplitViewController在ipad中的使用ipad的屏幕比iphone大&#xff0c;所以在界面上&#xff0c;ipad比iphone多一个UISplitViewController&#xff0c;用来实现ipad在横屏时&#xff0c;分两栏显示所需要的界面&#xff0c…