前一阵,笔者一直使用FastReport.Net开发报表,遇到一个连续纸的问题,没想到FastReport.Net竟然没有默认设置的无限页高,或者自动页高的功能。网上搜了一些,找出了类似于 FastReport.Net 无限页高(连续纸小票) - 青侠oO - 博客园 这样的技术博客。百度搜了一下也基本都是同样的内容。
但是内容都是全代码,没有什么鸟用啊,好多内容都需要自己配置研究。后来经过笔者的一番研究,终于找到了解决方案,大概也是跟上述文档的一致,只是一些细节没有贴出来。现在我结合我的创作历程,将上述代码进行改造后以图文的形式展示给大家,在这里感谢之前整理的前辈,我也是在前辈的基础上实现的功能。
好了正文开始:
需求:就是要实现连续纸的效果。
先看最后效果:
说明:上面图片中的(S)RK214100001 是绑定的数据行自动变化的,右下角的Q1 以及4LCN 和最下方的条码是固定的内容。
设计界面如下:
由于数据内容是动态的,因此需要绑定数据区。
点击左下方的代码按钮,切换到代码页签。
代码如下
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using FastReport;
using FastReport.Data;
using FastReport.Dialog;
using FastReport.Barcode;
using FastReport.Table;
using FastReport.Utils;
namespace FastReport
{
public class ReportScript
{
//定义数据区高度变量
private float data1Height;
//定义栏尾高度变量
private float ColumnFooter1Height;
Page1的StartPage事件
private void Page1_StartPage(object sender, EventArgs e)
{
if(Engine.FinalPass)
{
//页面高度的计算
Page1.PaperHeight = (data1Height+ColumnFooter1Height)/Units.Millimeters+ Page1.TopMargin +Page1.BottomMargin;
}
}
//数据区Data1的高度
private void Data1_AfterLayout(object sender, EventArgs e)
{
data1Height+=Data1.Height;
}
//栏尾ColumnFooter1的高度
private void ColumnFooter1_AfterLayout(object sender, EventArgs e)
{
ColumnFooter1Height+=ColumnFooter1.Height;
}
}
}
在上方代码中,有三个事件。
设置方式是:
1、点击数据区
2、点击属性页中的事件按钮
3、选择事件AfterLayout 对应的代码:Data1_AfterLayout
4、其他的两个事件也是如此,可以在属性页中选择对象
添加三个对象的事件:
1、Page1_StartPage
2、Data1_AfterLayout
3、ColumnFooter1_AfterLayout
有的小白可能会问,这个Data1是怎么来的呢?如果你增加了其他对象,可以从属性页中找到
最后就是页面的计算
Page1.PaperHeight = (data1Height+ColumnFooter1Height)/Units.Millimeters+ Page1.TopMargin +Page1.BottomMargin;
为啥加 /Units.Millimeters 我也不知道。。。。反正我是从其他地方复制粘贴过来的。
这个时候打印预览总是达不到效果,查了其他资料原来缺少了一箱配置
非常重要 非常重要 非常重要
报表必须开启“双通道”
开启方式:报表菜单->选项-> 一般->勾选双通道
至此,就能实现自动页高,连续纸小票功能。
大功告成。
对了附上本次版本
如有问题,欢迎指正,我再完善。
另外,新增加事件的方式,就是在事件上右侧空白那双击即可,如下图红框部分。