【问题标题】:Suppress or write text if condition is met formula crystal reports如果满足条件公式水晶报表,则禁止或写入文本
【发布时间】:2019-01-29 17:13:22
【问题描述】:

我在子报表中有一个文本对象字段,我需要评估从 DB 给出的值,如果该值与任何给定选项匹配,则将写入该文本(每个选项都有不同的文本)。因为它在一个盒子里,所以我需要把它压住,这样它看起来还可以。 像这样的:

    If {MyDB.ValueId} = 1 then 'write text one'
      else (should suppress since no text is needed)
    If {My.DB.ValueId} = 2 then 'write text two'
      else (should suppress since no text is needed)
    If {My.DB.ValueId} = 2 then 'write text two'
      else (should suppress since no text is needed)

我在抑制选项旁边写了公式,它无法保存,因为它需要布尔值(真或假,而不是某些文本)。 知道怎么做吗?提前Tnx..

【问题讨论】:

  • 尝试从 SQL 查询而不是 C# 或水晶报表逻辑中获取相关文本值,您可以使用 CASE 语句
  • @DilanWickramarathna 没办法,DB太复杂了,必须在报表公式里处理

标签: c# crystal-reports


【解决方案1】:
Select {MyDB.ValueId}
Case 1: 'text one'
Case 2: 'text two'
Default: "" ; 

【讨论】:

  • 谢谢,但问题比这复杂一点
【解决方案2】:

你做错了。您无法在同一个公式中处理文本的打印和字段/部分的抑制。您需要一个公式来处理文本,然后需要另一个公式来处理抑制。

对于文本,公式类似于:

If {MyDB.ValueId} = 1 then 'write text one'
If {My.DB.ValueId} = 2 then 'write text two'
If {My.DB.ValueId} = 3 then 'write text three'

正如建议的那样,也可以使用 Case 语句,这对于正确的编码实践会更好。多个 If 语句将在此示例中起作用,但这是一个不好的习惯,因为如果有一个标量公式,例如在 Suprress 属性中使用的公式,则会导致错误,因为它可能返回超过 1 个值。 MilletSoftware 建议的 Case 语句是一种更好的代码结构,因为它遵循良好的编码习惯并且只返回一个值。

至于抑制公式,您将希望使用几乎相同的公式,但不是在您评估的值为真时打印文本,而是希望指定一个布尔值来指示字段或部分是否应该是压制。这将是这样的:

If {MyDB.ValueId} In [1, 2, 3] then False
Else True

如果此公式用于字段或部分的 Suppress 属性,则当 MyDB.ValueId 为 1、2 或 3 时,它将显示字段或部分;同时抑制所有其他值的字段或部分。不过,您应该注意它将如何处理空值。有时,如果没有专门处理空值,它们可能是不可预测的。但是,这个公式应该没有任何问题。

【讨论】:

  • 感谢您的建议,我会尝试为文本和抑制做单独的公式。对于文本,它可能是 2 条或更多条正确的语句,这就是我使用 if 条件的原因。如果有多个条件为真,我需要合并这些文本并将它们一起打印出来。
【解决方案3】:

我在这里有几个想法: A)如果该字段在子报告中被禁止,那么 R. McMillan 所写的内容应该适合您。

B) 如果该字段在主报告中被禁止显示,则不会。您将需要利用变量将信息从子报表传送到主报表。

Shared numberVar test1;
test1 := {@statement}
test1

在主报告中,您将复制公式,并使用该公式从那里创建您需要的任何抑制公式(我使用这样的东西来抑制子报告)。

我也会使用 case 语句而不是 in-then:

select {db.field}
case <condition1> : <do thing 1>
case <condition2> : <do thing 2>
default : <do thing 3>

我发现它是一个更短的语句更容易维护。

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多