0

我有一个名为 rptClientCareAll 的父报告。它由 3 个子报表控件组成。用户可以选择隐藏其中一个子报表的详细信息(如果相关,这是用于隐藏子报表详细信息的代码:) me.detail.visible = false

问题 1:当我独立于父报表打开子报表时(有时报表将显示为独立报表,有时显示为子报表,因此我需要它在两种情况下都可以工作),详细信息被隐藏,但报告没有“重新绘制”——因此,报告看起来很乱,因为页脚现在显示在页眉的正下方,但细节并未从屏幕上“删除”。如何“重新绘制”报告以删除详细信息?可以重新绘制表单,但我似乎无法重新绘制报告。

问题 #2:当我打开父报表然后选择隐藏子报表的详细信息时,详细信息被正确隐藏并“删除”(与上面的问题 #1 不同;很奇怪!),但是子报表的大小并没有缩小,因此,隐藏详细信息的全部意义都丢失了,因为父报表上有巨大的空白空间,子报表的详细信息曾经出现在该空间中。隐藏详细信息时如何使子报表缩小?我已经尝试将所有报表(父报表和子报表)详细信息部分的 Can Grow 和 Can Shrink 属性设置为 Yes,但这没有帮助。

注意:我在 acReportView 中显示报告,而不是 acViewPreview。似乎这可能会对触发哪些事件产生影响?

4

2 回答 2

0

因此,基本上问题 #1(报告是独立打开的,而不是作为子报告)在用户选择隐藏详细信息部分后通过简单的 Me.Requery 解决。

如果不关闭并重新加载报告,问题 #2 显然无法解决,这在我的情况下说起来容易做起来难。

对于我的情况,我添加了代码来执行以下操作:

  1. 当用户单击以将子报表的详细信息切换为隐藏/可见时,(a) 设置全局变量标志(布尔类型)以指示详细信息部分现在是否隐藏 (false) 与可见 (true),(b)设置不同的全局变量以指示需要重新打开报表,并 (c) 关闭报表。
  2. 在我的情况下,在父报表的关闭事件中,我必须在关闭报表时打开一个表单,因为我需要表单来重新打开报表(如果用于重新打开报表的全局变量设置为 True)一旦关闭,因为我无法从内部找到关闭和重新打开报告的方法。在表单中,我设置了一个计时器事件以在 333 毫秒 (TimerInterval = 333) 后触发,该事件重新打开报表并关闭表单本身。(当我尝试在表单的 Open 事件中重新打开报表时,报表实际上永远不会打开,因此我添加了计时器以延迟足够长的时间以允许报表在尝试重新打开之前完全关闭。)(当然,如果重新打开报表的全局变量为 False,那么表单就关闭了。)
  3. 在其详细信息部分在隐藏/可见之间切换的子报表中,在 Open 事件中,使用 Me.Detail.Visible = {globalvariableflag} 并将用于重新加载报表的全局变量设置为 False(因为现在已经重新加载了报表)。

它很笨重,但这是我能找到的唯一方法来完成按需隐藏和缩小细节部分。

于 2018-07-05T01:51:41.190 回答
-1

在 ON LOAD 事件中使用以下代码:

Private Sub Form_Load()
Dim C As Control    

For Each C In Me.Form

    If TypeOf C Is TextBox Then

            If IsNull(C) Or C = "" Or C = 0 Or C = "0" Then
                C.Visible = False
                C.Height = 0
            Else
                C.Visible = True
            End If
    End If
Next C

Me.Requery

End Sub
于 2019-03-23T13:18:52.820 回答