【问题标题】:Formatting null time in RDLC report在 RDLC 报告中格式化空时间
【发布时间】:2015-01-06 10:06:47
【问题描述】:

我正在将记录集中的时间值带回到 RDLC 报告中。 (c#Visual Studio 2013)
它们的到来是一个可以为空的时间跨度。
我显示为 HH:MM

这一切看起来都很好,直到我得到一个 null ,如果没有时间记录一个 null 返回,因为它是一个可为空的时间跨度类型。发生这种情况时,我在 RDLC 报告中收到 #error。我想要发生的是要么显示 "00:00" ,要么只是空白。

我尝试在 RDLC 中的 Expression 字段中添加一个 IFF,这样如果返回 null,我什么都不显示,或者 "00:00" ,但两者都返回相同的结果,即字段中的 #error。

=IIF(IsNothing(Fields!Hours.Value),nothing,Format(TimeValue(Fields!Hours.Value.ToString),"hh:mm"))

有什么想法吗?谢谢。

解决方案更新:

感谢您的所有帮助: 这是我用来在我的情况下工作的最后一个表达式:

=IIF(Fields!Hours.Value.ToString = "00:00:00","",Format(TimeValue(Fields!Hours.Value.ToString),"hh:mm"))

【问题讨论】:

  • 我有同样的问题,但你的解决方案对我不起作用 - IIF() 的第三个参数中的 Fields!Hours.Value.ToString 会导致 #error 随时 Hours 为空。跨度>
  • @Conrad 您在下面尝试过 Thorsten 的答案吗,也许他的答案对您有用?
  • 那也没用。作为一种解决方法,我结束了将上游值取消为空。

标签: c# rdlc timespan


【解决方案1】:

尝试将nothing 值替换为空字符串。也使用X is nothing 而不是ISNOTHING(x)

=IIF(Fields!Hours.Value is nothing,"",Format(TimeValue(Fields!Hours.Value.ToString),"hh:mm"))

无论你尝试什么,你都会得到#error,这让我想知道这个表达式是否正确,或者你是否还有其他事情要做,比如自动格式化或类似的东西。

请尝试在前景色上使用此表达式并将颜色设置为Red,以防值为null,如果不是,则设置为Green。还要检查是否选择了某些可能导致错误的显示格式。

【讨论】:

  • 感谢您的帮助 Thorsten,您说得对,我认为这里还有其他问题,它只是没有落入 IIF 声明的“什么都不是”部分,即从来没有看到 TimeSpan 为空,即使它是。最后,我通过对您的答案稍加改动来完成这项工作,因此我将您的答案标记为正确。什么对我有用,而不是检查 null ,我现在检查 =“00:00:00”,为什么我必须这样做我不知道,但这对我有用:=IIF(Fields!Hours.Value.ToString =" 00:00:00","",Format(TimeValue(Fields!Hours.Value.ToString),"hh:mm"))
【解决方案2】:

您可能需要在容器中使用两个重叠的文本框,其可见性条件基于 Hours 字段的值。

一个会显示您格式化的时间跨度:

= Format(TimeValue(Fields!Hours.Value.ToString),"hh:mm")

使用可见性表达式(隐藏时为真):

= IIF(IsNothing(Fields!Hours.Value), True, False)

如果您不需要在时间跨度为空的情况下显示某些值(如“-”),则不需要第二个文本框,但如果这样做 - 第二个文本框将显示您的“无”字符串:

= "nothing string"

它的可见性表达式是:

= IIF(IsNothing(Fields!Hours.Value), False, True)

【讨论】:

  • 为什么?必须做很多次,从来没有问题
  • 重叠的元素会在我们的报告中导致各种呈现错误,而且它们不易易于维护,尤其是在对齐时。更好的解决方案是正确表达。
  • @Alicia,我要澄清的是,它不是 VISIBILITY 属性,而是报告中的 HIDDEN 属性(在“可见性”部分下)。默认情况下,HIDDEN 为 FALSE(不隐藏)。根据相关列的 NULL 值将其更改为 TRUE。
  • 感谢 InitKnit 的帮助,但我设法通过使用上述 Thorsten 解决方案使其正常工作。
【解决方案3】:

Thorsten Dittmar 的解决方案对我有用,但我认为关键是删除 IIF 中的 TimeValue 或 DateValue 表达式。

我最初也是这样做的,以返回日期或时间,然后使用文本框格式选项添加格式。但是,当字段值为 Null 时,TimeValue 或 DateValue 会返回错误,提示 iif 语句无论如何都会评估这两个结果。

无论如何,这有效(对我来说):

=iif(Fields!DateRequired.Value is nothing, nothing, Format(Fields!DateRequired.Value,"HH:mm"))

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多