设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 7004|回复: 17
打印 上一主题 下一主题

[窗体] 【Access小品】TreeView节点拖曳示例

[复制链接]
跳转到指定楼层
1#
发表于 2013-11-29 21:16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  前几日写了一个TreeView的右键示例,受到版友们的欢迎。TreeView控件的用途广泛,技巧甚多。不过由于它不是Access的内置控件,所以学习起来还是有些困难存在。今日,又有版友问起创建TreeView节点的问题,在解决完他的问题后,决定以其数据,写一个简单的节点拖曳的示例,供初学者参考。



















Office交流网开发的Access专用树控件免费下载-支持64位
http://www.office-cn.net/book/accesstree/5.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享分享 分享淘帖1 订阅订阅
2#
发表于 2013-11-29 21:37:25 | 只看该作者
版主猛人啊
3#
发表于 2013-11-29 21:42:54 | 只看该作者
不错,老大,我单位里有个程序也在用treeview,遇到一个问题,treeview加载数据库中的各表及其字段,要实现点任意子节点,在子窗体中显示对应的数据源,有没有简单的写法?我现在用的是判断子节点级别,然后分别给子窗体赋值,因为单位不能上网,所以我举个例子您帮我看看。

数据库中有3个表,分别为
表1:编号,姓名,性别,出生日期
         01      张三    男      19481204
         02      李四    男      19860430
表2:编号,班级,班组
          07    class1  3组
          08    class3  4组
表3:姓名,出生日期,成绩,排名
         张三    19900924   97     2
         李四    19871110   96     3


另有一个表4:表名,排序字段1,排序字段2,排序字段3
                      表1     姓名
                      表2     班级             班组
                      表3     排名              姓名         成绩

现在,窗体打开时,treeview根据表4里的表名和排序字段自动加载各表和子节点,已经实现,如下

表1(表的名称)
-------张三
-------李四
表2
-------class1(第一级子节点)
--------------3组(第二级子节点)
-------class3
--------------4组
表3
--------2
--------------张三
-------------------97
--------3
---------------李四
-------------------96

假如直接点击表2下面第二级子节点“4组”,那么子窗体的recordsource="select * from 表2 where 班级='class3' and 班组='4组'"
假如直接点击表3下面第二级子节点“96”,那么子窗体的recordsource="select * from 表3 where 排名=3 and 姓名='李四' and 成绩=96"

我现在用的判断子节点fullpath中的"\"值,然后用split取它的第1、第2、第3个值,再设子窗体的recordsource,感觉这方法很笨,请问有没有好的办法。

(因为工作上有许多各种各样的数据要处理,用excel表太麻烦,特别是数据量一大就很慢,所以一直喜欢用access写数据库和管理,上面的要求如果分几个数据库和不用treeview肯定可以实现,但那样就学不到新的东西了)

注:各表之间没有关联


4#
 楼主| 发表于 2013-11-29 22:06:47 | 只看该作者
本帖最后由 todaynew 于 2013-11-29 22:10 编辑
玉树TMD临风 发表于 2013-11-29 21:42
不错,老大,我单位里有个程序也在用treeview,遇到一个问题,treeview加载数据库中的各表及其字段,要实现 ...

应该不必这么麻烦。
因为你的tree是确定层级的,每个层级都有特定的含义。这样的话在加载时,对node的key值前面分别加上a、b、c....
这样在单击node事件中,读出node.key,然后用left取出第一个字符(a、b、c....),这样就知道节点所在的层了。

你把这个示例中的SetTree子程序,用以下代码替换一下,然后运行就明白怎么回事了。
Private Sub SetTree(ByVal tree As TreeView, ByVal Parentkey As String)
    Dim id As Long, str As String
    Dim rs As New ADODB.Recordset
    Dim ssql As String
    Dim i As Long
    Dim node As node

    str = Left(Parentkey, 1)      '取父节点key的第一个字符
    id = Val(Mid(Parentkey, 2))   '取父节点key中的ParentID值

    If id = 0 Then
        tree.Nodes.Clear
        Set node = tree.Nodes.Add(, , Parentkey, "产品目录", "k1", "k2")
        node.Expanded = True
    End If

    ssql = "select * from tblType WHERE ParentID = " & id
    rs.Open ssql, CurrentProject.Connection, adOpenStatic, adLockReadOnly
    str = Chr(Asc(str) + 1)    '字母递增一位
    For i = 1 To rs.RecordCount        '注意这里获得节点层级
        Set node = tree.Nodes.Add(Parentkey, tvwChild, str & rs!id.Value, rs!Name.Value & "--第" & Asc(str) - Asc("a") & "层", "k1", "k2")
        Call SetTree(tree, str & rs!id.Value)
        rs.MoveNext
    Next

    rs.Close: Set rs = Nothing
    Set node = Nothing

End Sub



点击这里给我发消息

5#
发表于 2013-11-29 22:10:59 | 只看该作者
很棒,顶
回复

使用道具 举报

点击这里给我发消息

6#
发表于 2013-12-2 13:07:19 来自手机 | 只看该作者
谢谢分享来自: Android客户端
回复

使用道具 举报

7#
发表于 2013-12-2 18:24:50 | 只看该作者
todaynew 发表于 2013-11-29 22:06
应该不必这么麻烦。
因为你的tree是确定层级的,每个层级都有特定的含义。这样的话在加载时,对node的ke ...

大师指点,茅塞顿开啊,明天去单位试试看.另外android手机登录access中国挺困难的,不知道有没有android版本
8#
发表于 2013-12-5 22:31:17 | 只看该作者
厉害,不过我感觉拖拽是不是应该有个安全开关之类的保护机制!!!
9#
发表于 2013-12-5 22:33:52 | 只看该作者
报错无法拖拽!!!
10#
发表于 2013-12-5 22:36:00 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 03:04 , Processed in 0.105517 second(s), 37 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表