访问:在没有数据的情况下在子报表中显示文本框控件

时间:2011-04-07 12:30:06

标签: ms-access vba ms-access-2007

在子报表中,我在detail_format事件上创建了一个sub,它将在没有返回数据时显示文本。

‘Code in sub-report
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)

If Me.Report.HasData Then
    Me.Label43.Visible = True
    Me.txtNotEntered.Visible = False
Else
    Me.Label43.Visible = True
    Me.txtNotEntered.Visible = True
End If

End Sub

单独运行时,它在子报表上工作正常。当我运行主报告时,它不会触发。

我在主报告中添加了相同的代码,看它是否有用。它贯穿代码行,但仍无法看到txtNotEntered文本框控件。

‘Code in main report
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)

If Me!rptResults_Comments.Report.HasData Then
    Me!rptResults_Comments.Report.Label43.Visible = True
    Me!rptResults_Comments.Report.txtNotEntered.Visible = False
Else
    Me!rptResults_Comments.Visible = True
    Me!rptResults_Comments.Report.Label43.Visible = True
    Me!rptResults_Comments.Report.txtNotEntered.Visible = True
End If

End sub

我正在使用MS Access 2003。

3 个答案:

答案 0 :(得分:3)

由于子报表绑定到主报表,因此如果没有数据将子报表连接到主报表,则不会显示子报表本身。通过将子报表的详细信息部分的背景颜色设置为红色或任何其他非白色,可以更好地看到这一点。

一种解决方法是将txtNotEntered控件移动到主报表并将其“置于”子报表控件下(使用“发送至后台”)。然后将子报表控件的Can Shrink属性设置为True。

然后,当子报表中有数据时,您将看到子报表,它将覆盖txtNotEntered控件。如果没有数据,子报表将缩小,您将能够看到txtNotEntered控件。

这种方法的一个优点是它不需要代码。只需将txtNotEntered Visible属性设置为True即可。在适当的时候,子报告的缩小会照顾它。

答案 1 :(得分:3)

除了mwolfe02的答案之外,我建议不要使用标签而VB代码使用带有以下表达式的文本框:

=IIf([HasData],"","No data found")

我在所有报告中使用此功能。像

这样的表达式
=IIf([rptResults_Comments].[Report].[HasData],","No data found")

应该也可以。我没有测试后一个表达式,所以我不确定是否需要[Report]。

答案 2 :(得分:0)

除了@rick的问题之外,当子报表中没有数据时如何显示“无数据”文本,这也足以应付主报表控件引用子报表控件(和子报表)的情况拥有(没有)数据)。当您计算引用许多子报表中的小计的总计时,可能会发生这种情况。

因此,我们可以将@ mwolfe02和@TheOtherTimDuncan解决方案(从@TheOtherTimDuncan改用他对HasData属性的使用)与我自己的一些偶然补充作为清单。

我们有一个主报告rptMain和一个子报告srpSub。在rptMain(详细信息部分)中,我们有一个子控件sbctSub,它引用了srpSub

  1. rptMain上创建一个标签(通常不需要将其作为文本框)lblNoData,其中包含您喜欢的任何文本(例如“未返回任何数据”)。将lblNoData放在sbctSub下(使用“发送回”)。使用相同的Top值。这样可以确保它们不会垂直重叠,从而在发生收缩/增长时不会出现问题。

  2. 添加一个“注释”标签,该标签始终可供开发人员在设计视图中查看,但被永久设置为Visible = No(这使其在非设计视图中不可见),并带有“ Hidden lblNoData under子控件”。如果需要缩小(Can Shrink = Yes),请使其成为未绑定的文本框。给这样的注释标签(或文本框)上色以在设计视图中突出显示(例如,我通常使用蓝色)。否则,在开发过程中,有可能会失去作为开发人员的视线的危险(更糟糕的是,如果另一个开发人员必须分析您的工作)。

  3. 确保将以下各项设置为Can Shrink = Yes

    • rptMain,详细信息。
    • sbctSub

    srpSub没有数据时,lblNoData将显示给用户,因为sbctSub将缩小为零。

  4. 在生产中,“无数据”标签可能会透出一些问题(白色背景在某些情况下似乎透明地起作用)。如果是这样,请在rptMain中:

     Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
       Me.lblNoData.Visible = (Not Me.sbctSub.Report.HasData)
     End Sub
    

    (我的“设计峰值”测试按@ mwolfe02所述进行。也就是说,不需要其他代码,我可以根据需要依赖于子控件隐藏和显示“无数据”标签。但是,我的生产报告具有这些奇怪的透明性问题。)

  5. 如果您在rptMain上有任何控件(例如txtGrandTotal)引用了srpSub上的控件,请按如下所示设置控件源

     =IIf([sbctTemp].[Report].[HasData],[sbctTemp].[Report]![txtSubTotal],0)
    

    从零到零Nz()甚至在引用控件都不存在的情况下也不起作用,因为子报表不返回任何数据。

编辑01:添加了附加代码,以在出现透明性问题时隐藏和显示“无数据”标签。将其从最后一步列出重新排列为顺序更合理。

编辑02:提一下,如果需要缩小,注释标签应该是一个文本框。

相关问题