FastReport.Net报表生成器:如果没有数据,如何隐藏列表中的列
制作报表时,我们希望它对使用者尽可能“友好”。太多的数据和设计元素处理使人们对信息的理解更加不利。比如,许多人希望删除表中的没有数据的空格。FastReport.Net报表生成器使您可以执行此功能。如您所知,不仅需要隐藏该列,而且还需要为其隐藏标题。如果用鼠标单击几下即可隐藏一列,那么隐藏标题任务却并非易事。
假设我们有一个表,要从中显示报表中的数据。但是,某些数据可能会丢失或设置为零。在这种情况下,我们可以使用“条件选择”工具隐藏零数据单元。选择所需的单元格,然后单击工具栏上的图标:
添加条件时,默认情况下将检查零。那就是我们所需要的。我们仅选择显示选项。在我们的例子中,我们删除可见的标志:
因此,通过这些非精简的操作,我们已经实现了隐藏的零数据单元。但这并不能解决所有问题。我们的任务是在没有值大于零的情况下隐藏整个列的标题。此列中的空白将检查每页的输出。
要检查给定列中页面上是否没有数据,我们将使用“结果”。
该结果由给定的列求和,并汇总其中的所有值。如果总数为零,则该列中没有单个值大于零,因此您需要隐藏该列的标题。
现在,让我们添加结果:
结果放入“页脚”区域中:
然后可以使用“visible”属性隐藏结果。
然后,让我们设置逻辑以隐藏最后一列的标题。代替RUB文本,我们引入表达式:
[IIf([Total]!=0,Text14.Text = "RUB",Text14.Text = "")]
但是,这还不是全部。由于结果是在页面上显示标题和数据之后形成的,因此在执行我们上面介绍的表达式时,总价值无关紧要。因此,我们需要在列标题中使用延迟表达式计算选项,并对报表进行两次遍历。
选择一个带有RUB列标题的文本框。在文本字段的属性中,我们找到ProcessAt并更改为PageFinished:
之后,我们需要打开报表属性并安装“Doublepass”选项:
此选项使您可以两次生成报表。在第一种结构中,将计算所有结果,在第二种结构中,这些结果可用于标题。所有这些都是必要的,因为报表在元素上是一致的。也就是说,在构建下一个元素时,您将无法更改前一个元素。因此,您需要进行重新构建,以考虑下一个元素的结果。
让我们看看RUB列中所有数据何时为0时报表的工作方式:
在某些页面上可以显示数据,因此该列也会显示:
这样,我们可以根据列中的数据动态显示或隐藏列。