设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[窗体] 数据表隔行显示不同颜色的问题请教

[复制链接]
跳转到指定楼层
1#
发表于 2011-12-9 11:52:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想让数据表隔行显示不同颜色,参照论坛上的例子,我也做出这种效果,但现在出现的情况是,当我删除了记录,或者是调整了排序方式,数据表隔行显示的效果就出错了。所以我想问,像这种情况如何处理呢。


还有,如图所示,数据表下面导航栏的记录号是按什么排序的呢,它的代码是多少呢,我想让数据表通过它来隔行显示不同的背景颜色,以解决记录被删除或排序引起的同色情况,可行吗?

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-12-9 22:53:35 | 只看该作者
本帖最后由 roych 于 2011-12-10 11:02 编辑

       虽然那个例子没看过,不过按我的思路,应该是用Mod函数来判断记录条数来设置的吧?其实也可以单独设置控件而不必拘泥于条件格式。
       今天特意找了下两个例子看了下,比较推荐小宝同志的做法(http://www.office-cn.net/thread-71049-1-1.html)。
yori2007同志则是在控件中写了条件格式(http://www.office-cn.net/thread-62012-1-1.html),根据Dcount来统计第几条记录,判断是否该记录条数的奇偶性,从而处理条件格式。详见附件中子窗体的“序号”控件,这跟我所料没多大出入。
       ——当然,我不知道你所找到的例子是哪个例子。如果按yori2007的做法,记录条数跟自动编号字段是毫无关系的。因此,如果你以自动编号为依据来处理条件格式,增减记录自然会影响条件格式的判断了。
3#
 楼主| 发表于 2011-12-10 16:58:19 | 只看该作者
roych 发表于 2011-12-9 22:53
虽然那个例子没看过,不过按我的思路,应该是用Mod函数来判断记录条数来设置的吧?其实也可以单独设 ...

t小宝的方法主要适用于连续窗体,对于数据表似乎不起作用。

yori2007采用的条件格式主要适用于记录较少的数据表,如果记录庞大,数据表采用条件格式,会非常闪的。

我参考的例子见附件。

本帖子中包含更多资源

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

x
4#
发表于 2011-12-11 12:33:59 | 只看该作者
本帖最后由 roych 于 2011-12-11 15:07 编辑

{:soso_e112:}里面还是用了条件格式,只是用代码实现而已。晚些再看看。
先说说该范例的实现原理:
1、根据自动编号字段,计算当前记录的条数。也就是里面的Rank控件:
=DCount("*","表1","货物ID<='" & [货物ID] & "'")
货物ID为自动编号,自增长类型,因此依次返回1、2、3、4……
2、根据记录所属条数奇偶性,设置条件格式,即里面的当前事件和加载事件代码。代码比较多,这里注释当前事件部分。有需要的话再回帖。

  1. Private Sub Form_Current()
  2. '如出错则跳过,继续执行
  3. On Error Resume Next   
  4. '定义当前记录数(即记录导航器中的数值)
  5.     Dim cuid As Long
  6.     cuid = Me.CurrentRecord
  7. '定义条件格式
  8.     Dim objfrc As FormatCondition
  9.     Dim ctl As Control
  10. '对所有控件执行条件格式。
  11.     For Each ctl In Me.Form.Controls
  12. '更改条件格式1(注意,VB里绝大多数集合都是从0开始的)
  13. '条件格式类型为:表达式。Rank控件为偶数,且并非当前记录时为浅绿色(详见加载事件)
  14.         Set objfrc = ctl.FormatConditions(0).Modify(acExpression, , "[Rank] Mod 2 = 0 And [Rank] <>" & cuid & "")
  15. '这个就不解释了,类似于上面。需要注意的是,这两个条件格式顺序不能乱,否则格式会出错。
  16.         Set objfrc = ctl.FormatConditions(1).Modify(acExpression, , "[Rank] = " & cuid & "")
  17.     Next
  18. End Sub
复制代码
因此,如果需要实现删除前后都能实现条件格式效果的话,请在确认删除后事件中对Rank重新计算:

  1. Private Sub Form_AfterDelConfirm(Status As Integer)
  2. Me.Rank.Requery
  3. End Sub
复制代码
5#
发表于 2011-12-12 09:35:19 | 只看该作者
同样关注。
6#
发表于 2011-12-13 09:56:09 | 只看该作者
roych 在4楼说的例子的代码是哪个例子的的代码呀?
7#
发表于 2011-12-14 19:26:21 | 只看该作者
ycxchen 发表于 2011-12-13 09:56
roych 在4楼说的例子的代码是哪个例子的的代码呀?

是对应3L的例子的。

点击这里给我发消息

8#
发表于 2011-12-15 12:03:44 | 只看该作者
2003版实现数据表隔行变色很麻烦而且效果很不好,能不用尽量不用
2007以上的版本已经内置数据表隔行变色
9#
发表于 2011-12-15 15:32:58 | 只看该作者
t小宝 发表于 2011-12-15 12:03
2003版实现数据表隔行变色很麻烦而且效果很不好,能不用尽量不用
2007以上的版本已经内置数据表隔行变色

看来,2003的还是少用好。
10#
 楼主| 发表于 2011-12-22 22:45:15 | 只看该作者
可是我们公司是指定了用2003版本,如果用2007版本,我担心在与外单位交流时容易因版本问题引起冲突。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-22 23:27 , Processed in 0.098148 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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