FastReport打印实现合并单元格的方法【最简洁、通用的写法】系统中有一个打印需要实现一个字段的显示合并值,而fastreport只提供了抑制重复值属性(SuppressRepeated),它不能直接把框线给自动合并,这样虽然隐藏了重复值,但显示上就还是有点不太美观,所以就专门研究出了这样的一个方法。网上虽然也有许多类似的解决方法,不是过于复杂,就是操作起来很麻烦,这是最最简洁通用的一个写法,所以与大家一起分享。
实现原理:
在报表开始前先计算出需要合并的行的高度数组,在打印前根据这个高度数组设置对应打印对象的高度和显示。
实现方法:
需要合并的字段显示抑制重复值属...
系统中有一个打印需要实现一个字段的显示合并值,而fastreport只提供了抑制重复值属性(SuppressRepeated),它不能直接把框线给自动合并,这样虽然隐藏了重复值,但显示上就还是有点不太美观,所以就专门研究出了这样的一个方法。网上虽然也有许多类似的解决方法,不是过于复杂,就是操作起来很麻烦,这是最最简洁通用的一个写法,所以与大家一起分享。
实现原理:
在报表开始前先计算出需要合并的行的高度数组,在打印前根据这个高度数组设置对应打印对象的高度和显示。
实现方法:
需要合并的字段显示抑制重复值属性(SuppressRepeated)为true。
设置Page1的OnBeforePrint事件,MasterData1的OnBeforePrint事件,代码如下:(代码中红色字体部分注意修改为报表实际的内容)
var
iRowCount:Integer; AryHeight:Array of Extended;
procedure Page1OnBeforePrint(Sender: TfrxComponent);
var
i,iRepeat: Integer;
sLastValue,sCurValue: String;
MyDataSet: TfrxDBDataSet;
begin
MyDataSet := TfrxDBDataSet(Report.GetDataSet('数据集名
'));
iRowCount := MyDataSet.RecordCount;
SetLength(AryHeight,iRowCount);
MyDataSet.First;
sCurValue := '';
for i := 0 to iRowCount - 1 do begin
sLastValue := sCurValue;
sCurValue := MyDataSet.DataSet.FieldByName('字段名
').AsString;
if (sLastValue <> '') and (sLastValue = sCurValue) then begin
iRepeat := iRepeat + 1;
AryHeight[i] := 0;
AryHeight[i - iRepeat] := MasterData1.Height * (iRepeat + 1);
end
else begin
iRepeat := 0;
AryHeight[i] := MasterData1.Height;
end;
MyDataSet.Next;
end;
end;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
if AryHeight[ - 1] = 0 then begin
Memo15.Visible := False;
end
else begin
Memo15.Visible := True;
Memo15.Height := AryHeight[ - 1];
end;
end;
begin
end.
本文档为【FastReport打印实现合并单元格的方法【最简洁、通用的写法】】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。