Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何在FastReport中不显示零值并将其移位_Delphi_Reporting_Fastreport - Fatal编程技术网

Delphi 如何在FastReport中不显示零值并将其移位

Delphi 如何在FastReport中不显示零值并将其移位,delphi,reporting,fastreport,Delphi,Reporting,Fastreport,我在FastReport中有一个问题。我需要做一个报告,其中我只看到非零值。例如,我有masterdata,它填充来自sql查询的数据。在masterdata上,我放置了3个描述和值字段。它看起来像这样: [DATA."DESC1"] DESCRIPTION1 [DATA."VALUE1"] 100 [DATA."DESC2"] DESCRIPTION2 [DATA."VALUE2"] 0 [DATA."DESC3"] DESCRIPTION3 [DATA."VALUE3"] 50 我想看看报

我在FastReport中有一个问题。我需要做一个报告,其中我只看到非零值。例如,我有masterdata,它填充来自sql查询的数据。在masterdata上,我放置了3个描述和值字段。它看起来像这样:

[DATA."DESC1"] DESCRIPTION1 [DATA."VALUE1"] 100
[DATA."DESC2"] DESCRIPTION2 [DATA."VALUE2"] 0
[DATA."DESC3"] DESCRIPTION3 [DATA."VALUE3"] 50
我想看看报告

DESCRIPTION1 100
DESCRIPTION3 50
但现在我看到这样的景象

DESCRIPTION1 100

DESCRIPTION3 50

我不想看到空白位置,我需要在第二个位置上移动第三个位置,因为第二个值为null。当然,在我的SQL查询中,有更多具有值的字段。我试图找到一些循环来解决我的问题,但我没有找到。我尝试使用属性Visible或ShiftMode,但这并没有帮助。也许有人知道如何在FastReport中解决这个问题。请帮帮我

在MasterData频带的属性中,确保将Stretchable设置为True,并将Stretch Mode设置为实际大小

作为一个附加选项,您可以始终使用
OnBeforePrint
事件(在本例中为
MasterData
带)并组织您的逻辑:

例如,当
数据。“VALUE2”
为0时:

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
var
   top: Extended;                                     
begin
   top := 0;                           
   // TfrxMemoView 1                                                    
   Memo1.SetBounds(Memo1.Left, top, Memo1.Width, Memo1.Height);
   top := top + Memo1.Height;
   // TfrxMemoView 2                                                       
   if (<DATA."VALUE2"> = 0) then begin                                      
      Memo2.Visible := False;                                                      
      end
   else begin
      Memo2.Visible := True;                                                      
      Memo2.SetBounds(Memo2.Left, top, Memo2.Width, Memo2.Height);
      top := top + Memo2.Height;
   end;
   // TfrxMemoView 3                                                       
   Memo3.SetBounds(Memo3.Left, top, Memo3.Width, Memo3.Height);
   top := top + Memo3.Height;
end;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
var
   top: Extended;                                     
begin
   top := 0;                           
   // TfrxMemoView 1                                                    
   if (<DATA."VALUE1"> = 0) then begin                                      
      Memo1.Visible := False;                                                      
      end
   else begin
      Memo1.Visible := True;                                                      
      Memo1.SetBounds(Memo1.Left, top, Memo1.Width, Memo1.Height);
      top := top + Memo1.Height;
   end;
   // TfrxMemoView 2                                                       
   Memo2.SetBounds(Memo2.Left, top, Memo2.Width, Memo2.Height);
   top := top + Memo2.Height;
   // TfrxMemoView 3                                                       
   Memo3.SetBounds(Memo3.Left, top, Memo3.Width, Memo3.Height);
   top := top + Memo3.Height;
end;

如果您的查询将这些值作为多行而不是多列返回,这将是微不足道的

您当前的查询必须类似于:

select 'Name' as Desc1, Name as Value1, 'Surname' as Desc2, Surname as Value2, 'Address' as Desc3, Address as Value3, ....
from MyTable
where Id = X
您可以将其更改为:

select 'Name' as Desc, Name as Value
from MyTable
where Id = X
union
select 'Surname' as Desc, Surname as Value
from MyTable
where Id = X
union
select 'Address' as Desc, Address as Value
from MyTable
where Id = X
...

因此,现在隐藏FastReports上的空值就像在执行报告之前在数据集上过滤空值一样简单。

您还可以放置3个不同的MasterData标注栏(或更多),所有标注栏都链接到数据。因此,您可以将每个备忘录插入它们自己的主数据中,并在主数据的特定内容为空时使用OnBeforePrint隐藏该主数据。

谢谢您的回答。我知道这可能是一个很好的解决方案,但我必须像处理多列而不是行一样处理这些数据。谢谢你的回答。在我的情况下,我试图推动这个解决方案,但我认为它可能是一个好的解决方案。嗨,你的解决方案应该是好的。当第一条记录为0,我需要将第二条记录移到第一条记录所在的位置时,您能告诉我如何更改此代码吗?