FastReport中国社区FastReport联系电话 联系电话:023-68661681

FastReport报表示例:打印可变栏数或未知栏数的报表

来源:   发布时间:2016-08-08   浏览:3939次

实际应用中常常需要打印一个不确定栏数的分栏报表或栏数在执行阶段会改变。例如在开发一个可能需要打印一个数据表数据的数据库编辑器中就需要它。这种情况报表只能使用程序代码创建,但FastReport提供了一种更简单的方法来解决这个难题。

就是使用交叉表来达到这个目的。这种报表的与众不同的特点就是在栏中打印数据。在此之前不需要知道分栏数。特别是这种类型的报表交叉部分是垂直放置,而不是水平的。这些区域的“Text”对象被放在水平(例如“主项数据”)和垂直(例如“交叉表”)区域的交叉点上。这种情况报表通过下面的原理创建:对水平区域数据源中的所有记录全部被正确从垂直区域数据源的记录中查找并指定。

因而,对于“主项数据”打印数据源数据表的内容时包含的是数据表自身,各个单独记录的字段列表是“交叉表”区域的数据源。

一个交叉表报表的简单例子可以从PRNTBL1子目录中找到。从这个例子中看到的报表在这个图象中显示。

这个图象显示“Text”对象放置在“主项数据”和“交叉表”区域的交叉点上,分别属于“主项数据”和“交叉表”区域。如果报表使用CUSTOMER.DB中的记录,就将它作为“主项数据”的数据源。报表中的栏目数由两个TfrUserDataset虚拟数据源,将CUSTOMER.DB的字段数与“记录”数连接。字段的值在TfrReport 对象的OnGetValue事件中设定:

procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant);

begin

  if ParName = 'Cell' then

    ParValue := Table1.Fields[frUserDataset1.RecNo].Value;

  if ParName = 'Header' then

    ParValue := Table1.Fields[frUserDataset2.RecNo].FieldName;

end;

当这个例子执行时,CUSTOMER.DB的所有记录将被预览。下面就是预览看到的图象:

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/1196.html

联系我们
  • 重庆总部 023-68661681
购买
  • sales@evget.com
合作
  • business@evget.com


扫码咨询
电话咨询
023-68661681
返回
顶部