设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 8501|回复: 23
打印 上一主题 下一主题

[模块/函数] 【Access小品】先利其器 -- 通用TreeView加载程序

[复制链接]
跳转到指定楼层
1#
发表于 2015-7-8 15:51:05 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
  版友三个太阳同志写了一段TreeView加载的程序,程序处理中用On Error Resume Next来排除已经加载的相同数据,我对此做法颇不以为然。不以为然的原因在于容错的处理通常是在除非必要时当可用,对于简单而正常的逻辑,用容错处理方式总不是一个好习惯。不过三个太阳同志希望简化代码的初衷是值得赞赏的。

  TreeView控件是系统设计中最为常见的控件,因为其广泛的使用,使得在一个系统中常常需要处理很多的TreeView数据加载的问题。TreeView数据加载的代码本身并不复杂,但写起来比较繁琐。究其原因,在于数据源与加载代码耦合度过高,所以一树一程序。由这个原因出发我们就会明白,简化TreeView加载的关键,在于数据源与子程序之间要降低耦合度。降低耦合度的方法,就是采用注入参数的方式来构建我们需要的TreeView加载程序。

  要采取注入参数的方式,我们首先需要搞明白注入些什么样的参数。你可能觉得这很简单嘛,当然需要注入各级节点需要的数据源。可是问题的复杂性在于,每个TreeView的各级节点的数据源的规律并不是恒定的。它们可能来源于多个数据表,也可能仅仅来源于一个表,还可能来源于数组、集合等变量。由于这个复杂性的存在,就难以用一个放之四海而皆准子程序来处理TreeView的通用加载。我们就需要抽象出一些常见和常用的数据源类型,仅对它们来编写通用的程序。至于你能够或者你需要抽象出些什么类型,那是你开发程序的实际需要所决定的。

  所谓工欲善其事工欲善其事必先利其器,而利其器的方法是有讲究的。这个讲究在于处理的思路和方法要得当,得当的标准不主要在于一段代码的简化(如版友三个太阳同志所做的那样),而更多的在于代码的复用性高低。

示例:

视图:


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




本帖子中包含更多资源

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

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享分享 分享淘帖1 订阅订阅
2#
 楼主| 发表于 2015-7-29 14:31:12 | 显示全部楼层
hunrybecky 发表于 2015-7-29 01:35
todaynew兄
我做了一个使用你这个通用TreeView加载树后并显示对应记录的窗体,代码比较冗长,你看看是否可 ...

两句代码即可:
Private Sub TreeView0_NodeClick(ByVal Node As Object)
    Me.Child1.Form.Filter = Node.Tag
    Me.Child1.Form.FilterOn = True
End Sub
3#
 楼主| 发表于 2015-7-31 08:55:01 | 显示全部楼层
本帖最后由 todaynew 于 2015-7-31 09:09 编辑
hunrybecky 发表于 2015-7-29 17:06
我开始也是这么写的,但是发现一个问题,就是单击节点的时候应该显示下级节点才对
如果直接这样写的话只 ...

N.tag 中只改等号左侧,右侧不变嘛。   
可以加一个形参,以满足两种你 n.tag 的计算。
顶级节点的tag写作“true“可筛选全部数据。

关于最低层节点的需求违背思维逻辑。  (最后两层节点筛选结果一致,让人无法理解 )

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

本版积分规则

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

GMT+8, 2024-5-3 21:36 , Processed in 0.089856 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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