fastreport_fastreport 横向分栏 - CSDN
精华内容
参与话题
  • FastReport完美破解版

    2016-02-29 10:29:52
    最好用的报表和标签设计工具,内置各种条码,可以生成并打印一维和二维码,已试用,非常好用。
  • delphi fastReport至今最全的三合一教程,内含fastreport中文教程(doc),FastReport_5_demo例子,fastreport官方文档(chm)。看过之后,基本上就能全部掌握fastreport
  • FastReport 亲测完美彻底破解版
  • FastReport中文包

    2019-03-04 14:43:44
    FastReport多语言包:包含中文 英文等等,每个版本几乎都可以使用
  • FastReport开发手册

    千次阅读 2019-01-08 04:59:27
    一、使用TfrxReport 组件工作1、加载并存储报表默认情况下,报表窗体同项目窗体构存储在同一个DFM文件中。多数情况下,无须再操作,因而你就不必采用特殊方法加载报表。如果你决定在文件中存储报表窗体或者是数据库...

    一、使用TfrxReport 组件工作
    1、加载并存储报表
    默认情况下,报表窗体同项目窗体构存储在同一个DFM文件中。多数情况下,无须再操作,因而你就不必采用特殊方法加载报表。如果你决定在文件中存储报表窗体或者是数据库的

    Blob字段(他提供了非常大的弹性,你能够在非编译程序中修改),你必须使用“TfrxReport”提供的加载和存储方法。
    function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean;
    从一个给定名字文件中加载报表。如果第二个参数等于“True”并且文件没找到,那么他会触发一个异常。如果文件加载成功,他返回“True”。

    procedure LoadFromStream(Stream: TStream);
    从流中加载报表。

    procedure SaveToFile(const FileName: String);
    用特殊名称文件存储报表。

    procedure SaveToStream(Stream: TStream);
    把报表存在流中。

    例如:
    Pascal:
    frxReport1.LoadFromFile('c:/1.fr3');
    frxReport1.SaveToFile('c:/2.fr3');

    C++:
    frxReport1->LoadFromFile("c://1.fr3");

    frxReport1->SaveToFile("c://2.fr3");

    2.设计报表
    通过“TfrxReport.DesignReport”方法调用报表设计器。你必须在你的项目中包含报表设计器(必要条件是:要么使用“TfrxDesigner”组件,要么增加“frxDesgn”单元到uses

    列表)
    “DesigReport”方法接受两个默认参数:
    procedure DesignReport(Modal: Boolean = True; MDIChild: Boolean = False);
    Modal参数决定设计器是否被模态,MDIChild参数允许把设计器窗体作为一个MDI子窗体。

    例如:
    frxReport1.DesignReport;

    3.运行报表
    应用下面两个“TfrxReport”方法中的一个启动报表:
    procedure ShowReport(ClearLastReport: Boolean = True);
    启动报表并在预览窗体中显示。如果“ClearLastReport”参数等于“False”,报表将会增加先前的一个报表结果,否则清除前一个报表结构。

    function PrepareReport(ClearLastReport: Boolean = True): Boolean;
    启动报表,没有打开预览窗体,参数赋值与“ShowReport”方法同名。如果报表构造成功,他返回“True”。

    多数情况下,使用第一种方法更为方便一些。在报表被构造的同时,他会立刻显示一个预览窗体。

    当需要增加另一个报表到前一个报表中的时候,“ClearLastReport”参数显得方便些。(此类技术用于批量报表打印)。

    例如:
    frxReport1.ShowReport;

     

    4.预览报表
    使用两种途径显示一个报表是可能的:两者都是调用“TfrxReport.ShowReport”方法(先前描述过了),或者使用“TfrxReport.ShowPreparedReport”方法来帮助实现。在第二

    种情况下,报表构造没有被执行,但显示了一个完成的报表。也就是说,你要么在“PreparedReport”方法帮助下构造他,要么在构造前从文件中加载报表(查看“加载/存储完

    成的报表”)

    例如:

    Pascal:

    if frxReport1.PrepareReport then
      frxReport1.ShowPreparedReport;

    C++:

    if(frxReport1->PrepareReport(true))
      frxReport1->ShowPreparedReport();

    在这种情况下,报表构造器先被完成了,并显示在预览窗体中。构造一个庞大的报表可能要花费很多时间,那就是为什么使用“ShowReport”非等时同步方法会好于

    “PrepareReport/ShowPreparedReport”方法。你可以通过“TfrxReport.PreviewOptions”属的缺省值设定预览参数值。(这句翻译的不够好,请参考原文)

    原文参考:In this case, report construction is finished first, and after that it is displayed in the preview window. Construction of a large report can take

    a lot of time, and that is why it is better to use the “ShowReport anisochronous” method, than the “PrepareReport/ShowPreparedReport” one. One can assign

    preview settings by default via the “TfrxReport.PreviewOptions” property.[SPAN]5、打印报表
    大多数情况下,你可以从预览窗体打印报表。要人工打印报表,你应该使用“TfrxReport.Print”方法,例如:

    frxReport1.LoadFromFile(...);

    frxReport1.PrepareReport;

    frxReport1.Print;

    同时,你可以在显示的打印对话框中设置打印参数,你也可以使用默认设定值。取消打印对话框,请参考“TfrxReport.PrintOptions”属性帮助

    6.载入并存储报表
    这个功能可以在预览窗口中执行。也可以使用手工方法执行,帮助参考“TfrxReport.PreviewPages”方法:
       function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean;

       procedure SaveToFile(const FileName: String);

       procedure LoadFromStream(Stream: TStream);

       procedure SaveToStream(Stream: TStream);
    赋值和参数化类似与TfrxReport相应的方法。文件包含了完成的报表,默认情况下以“FP3”为扩展名。

    例如:
    Pascal:
    frxReport1.PreviewPages.LoadFromFile('c:/1.fp3');
    frxReport1.ShowPreparedReport;

    C++:
    frxReport1->PreviewPages->LoadFromFile("c://1.fp3");
    frxReport1->ShowPreparedReport();

    注意,完成的报表加载完毕后,预览方法是通过“ShowPreparedReport” 方法执行的。

    7.导出报表
    他可以从预览窗口中执行。也可以手动操作,通过“FfrxReport.Export”方法,及这个方法中的参数,你可以导出你想要导出的文件类型:

    frxReport1.Export(frxHTMLExport1);

    导出过滤组件必须是有效的(你必须把他们放到你项目中的窗体上)并调整正确。

    The export filter component must be available (you must put it on the form of your project) and be adjusted correctly.

    8.创建自定义预览窗体
    FastReport在标准的预览窗口中显示报表。如果因为某些原因而不适合你,你可以创建一个自定义预览窗体。为了这个目的,需要设计FastReport组件面板中的“TfrxReport”组

    件。要显示报表,TfrxReport.Preview方法应该连接到这个组件。

    在使用TfrxPreview组件的时候,有两个典型的问题。他不会处理按键(箭头,PgUp,PgDown等等)和鼠标滚轮(如果有的话)。要让TfrxPreview同按键工作,设置焦点给他(他

    是可以做到的,例如,在窗体的OnShow事件句柄中)

    frxPreview.SetFocus;

    要让TfrxPreview同鼠标滚轮工作,你必须创建OnMouseWheel事件句柄,并且调用TfrxPreview.MouseWheelScroll方法。

    procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
    WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    begin
      frxPreview1.MouseWheelScroll(WheelDelta);
    end;


    9.建立复合报表(批量打印)
        在某些情况下,需要立刻组织几个报表打印,或者在一个打印预览窗体中封装并呈现几个报表。要执行这些,在FastReport中有些工具能够允许建立一个新的报表附加在一个

    已经存在的报表上。“TfrxReport.PrepareReport”方法中有一个选项“ClearLasReport”布尔类型参数,默认情况下他等于True,这个参数定义了是否有必要在建立报表时清除

    前一个报表。下面的方法展示了如何从两个报表中建立一个批量报表:
    Pascal:

    frxReport1.LoadFromFile('1.fr3');
    frxReport1.PrepareReport;
    frxReport1.LoadFromFile('2.fr3');
    frxReport1.PrepareReport(False);
    frxReport1.ShowPreparedReport;

    C++:

    frxReport1->LoadFromFile("1.fr3");
    frxReport1->PrepareReport(true);
    frxReport1->LoadFromFile("2.fr3");
    frxReport1->PrepareReport(false);
    frxReport1->ShowPreparedReport();
        我们加载并建立第一个报表,但并没有显示他。然后我们加载第二个报表到同一个TfrxReport对象,并使用“ClearLastReport”参数,让他等于False。这就允许第二个报表

    附加在先前建立的报表之后。接下来,我们在预览窗口中显示一个完成的报表。

    9.1 复合报表中的页数
        你可以使用“Page”,“Page#”,“TotalPages”和“TotalPages#”系统变量显示页数或总页数,在复合报表中,这些变量以下面的方式工作:
    Page - 当前报表页数
    Page# - 批量报表页数
    TotalPages - 当前报表总页数(报表必须两遍)
    Totalpages# - 批量报表总页数

    9.2 合并符合报表页数
        正如上面所说的,报表设计页中的“PrintOnPrevousPage”方法让你在打印报表的时候使用前一页的剩余空间接合报表。在复合报表中,允许你在前一个报表的最后一页的剩

    余空间创建一个新的报表。要执行这个,要使能每一个连续报表的第一个设计页“PrintOnPreviousePage”属性[SPAN]10.交互报表
        在交互报表中,你可以在预览窗口定义任意报表对象的鼠标单击反应。例如,一个用户能够单击数据线,结果运行一个带有选择线的明细数据。
        任何报表都能交互。要执行他,你仅仅需要创建TfrxReport.OnClickObject事件句柄。下面代码是这个事件句柄的示例:
    Pascal:

    procedure TForm1.frxReport1ClickObject(Page: TfrxPage; View: TfrxView;
      Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
    begin
      if View.Name = 'Memo1' then
        ShowMessage('Memo1 contents:' + #13#10 + TfrxMemoView(View).Text);
      if View.Name = 'Memo2' then
      begin
        TfrxMemoView(View).Text := InputBox('Edit', 'Edit Memo2 text:', TfrxMemoView(View).Text);
        Modified := True;
      end;
    end;

    C++:
    void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender,
          TMouseButton Button, TShiftState Shift, bool &Modified)
    {
      TfrxMemoView * Memo;
      if(Memo =  dynamic_cast <TfrxMemoView *> (Sender))
      {
        if(Memo->Name == "Memo1")
          ShowMessage("Memo1 contents:/n/r" + Memo->Text);
        if(Memo->Name == "Memo2")
        {
          Memo->Text = InputBox("Edit", "Edit Memo2 text:", Memo->Text);
          Modified = true;
        }
      }
    }


    在对象的单击事件句柄上,你可以做如下事情:
    - 修改一个对象或页的内容,传递句柄(结果,被修改的将被特殊标记,因此修改的内容应该引起重视);
    - 由于使用重构或重新建立报表,调用TfrxReport.PrepareReport方法

    在此例中,点击名字为memo1对象的结果显示这个对象内容的消息。当点击memo2是显示一个对话框,这个对象的内容可能被修改。设置Modified标志为True,允许保持和显示变更


     
    同样的方法,单击事件可以被定义成不同的响应。例如,运行一个新报表。如下注释是必要的。在FastReport3版本中,一个报表组件可以在一个预览窗口中显示唯一的报表(不像

    FastReport2.x版本)。那就是为什么一个报表预览窗也会在分开的对象中运行一个报表,或者是同一个对象,但当前报表必须被抹除。
     

    关于给终端用户一个可单击对象提示定位,在预览窗口中,鼠标经过一个可单击对象的时候,我们可以修改鼠标的光标。要做到这些,在报表设计器上选择一个要设计的对象并设置

    他的cursor属性为不同于crDefault的某个值。

    更多的细节涉及到定义的单击对象。在简单报表中,可以依照对象的名字或他的内容来定义。然而,这就不能更多的执行可修改的事例。例如,一个明细报表应当在一个数据选择

    行被创建。一个用户单击了内容为12的memo1对象。数据行让这个对象参考什么?那就是为什么你应当知道主键了,主键用于明确的标识这一行。FastReport能够赋值一个字串,包

    含任意数据(在我们的事例主键数据中),对于每个报表对象,这个字串存储在TagStr属性中。


    让我们来通过一个报表的例子来举例说明,这个报表包含在FastReportDemo.exe-'Simple list'示例中。这是一个公司的客户列表,包含诸如客户名称,地址,联系人等数据。数

    据源是来自DBDEMOS演示数据库的Customer.db表。这个表有一个主键,CustNO字段,他没有出现在报表中。我们的任务是终止他通过参考单击完成报表上的任意对象记录他,这就

    意味着要获取主键的值,要执行此项操作,就要为所有对象的TagStr属性加入值,依赖于主数据栏:
    [Customers."CustNo"]


    在报表建立期间,使用相同的方法计算TagStr属性内容,同时计算文本对象的内容;这就意味着变量值会替代所有变量的位置。变量细节使用方括号括起来。那就是为什么行值

    是'1005', '2112'等类似值了。在报表建立后,包含TagStr属性对象的类型取决与主数据栏。一个简单的从字串到整形的转换就会提供给我们一个主键的值,这也是所需记录能够

    找到的主键。
     

    如果主键是复合的(包含多个字段),TagStr属性的内容可能是如下值:
    [Table1."Field1"];[Table1."Field2"]

    在构造一个报表完成后,TagStr属性包含“1000;1”类型值, 此值不同比相同要好。

    11.从代码中存取报表对象
    报表对象(例如:report page, band, memo-object)是不能在你的代码中直接存取的。这就意味着你不能通过名字寻址对象。例如,当你在你的窗体上寻址一个按钮。要寻址一

    个对象,在TfrxReport.FindObject方法中找到帮助:

    Pascal:
    var
      Memo1: TfrxMemoView;
    Memo1 := frxReport1.FindObject('Memo1') as TfrxMemoView;

    C++:
    TfrxMemoView * Memo =
    dynamic_cast <TfrxMemoView *> (frxReport1->FindObject("Memo1"));

    然后,你就能够寻址对象的属性和方法。你也使用“TfrxReport.Pages”属性寻址报表页。

    Pascal:
    var
      Page1: TfrxReportPage;
    Page1 := frxReport1.Pages[1] as TfrxReportPage;

    C++:
    TfrxReportPage * Page1 = dynamic_cast <TfrxReportPage *> (frxReport1->Pages[1]);

    12.从代码中创建报表
    作为一项规则,你将在设计器中创建多数报表。然而,在某些情况下(例如,当报表窗体未知的时候),使用代码手工创建一个报表是是十分必要的。
    想要手工创建一个报表,你需要执行下面的顺序步骤:
    - 清除报表组件
    - 添加数据源
    - 添加数据页
    - 添加报表页
    - 添加栏页
    - 设置栏属性,接着把他们同数据相连
    - 在每个栏上加入对象
    - 设置对象属性,接着把他们同数据相连

    让我们来检查一下创建一个简单报表的类型列表。假设我们拥有如下组件:frxReport1: TfrxReport and frxDBDataSet1: TfrxDBDataSet(最后一个连接到DBDEMOS数据,

    Customer.db表)。我们的报表将包含一个带有报表标题和主数据栏的页。在报表标题栏上有一个带有“Hellow FastReport”文本的对象,主数据栏包含一个带有连接到“CustNo”

    字段的对象。

    Pascal:

    var
      DataPage: TfrxDataPage;
      Page: TfrxReportPage;
      Band: TfrxBand;
      DataBand: TfrxMasterData;
      Memo: TfrxMemoView;

    { 清除报表 }
    frxReport1.Clear;
    { 为报表添加数据集到可存取的列表中 }
    frxReport1.DataSets.Add(frxDBDataSet1);

    { 添加"Data"页 }
    DataPage := TfrxDataPage.Create(frxReport1);

    { 添加页 }
    Page := TfrxReportPage.Create(frxReport1);
    { 创建唯一名称 }
    Page.CreateUniqueName;
    { 设置默认字段大小, 纸张和打印方向 }
    Page.SetDefaults;
    { 修改纸张方向 }
    Page.Orientation := poLandscape;

    { 添加一个报表标题栏 }
    Band := TfrxReportTitle.Create(Page);
    Band.CreateUniqueName;
    { it is sufficient to set the ?Top? coordinate and height for a band }
    { both coordinates are in pixels }
    Band.Top := 0;
    Band.Height := 20;
     
    { 为标题栏添加一个对象 }

    Memo := TfrxMemoView.Create(Band);
    Memo.CreateUniqueName;
    Memo.Text := 'Hello FastReport!';
    Memo.Height := 20;
    { 这个对象将伸展坐标到栏的宽度 }
    Memo.Align := baWidth;
     
    { 添加主数据栏 }
    DataBand := TfrxMasterData.Create(Page);
    DataBand.CreateUniqueName;
    DataBand.DataSet := frxDBDataSet1;
    { 顶端的调整应当比先前加入栏的顶部+高度大一些 }
    DataBand.Top := 100;
    DataBand.Height := 20;

    { 在主数据栏上添加一个对象 }
    Memo := TfrxMemoView.Create(DataBand);
    Memo.CreateUniqueName;
    { 连接数据 }
    Memo.DataSet := frxDBDataSet1;
    Memo.DataField := 'CustNo';
    Memo.SetBounds(0, 0, 100, 20);
    { 调整文本到右侧的对象边缘 }
    Memo.HAlign := haRight;

    { 显示报表 }
    frxReport1.ShowReport;


    C++:

    TfrxDataPage * DataPage;
    TfrxReportPage * Page;
    TfrxBand * Band;
    TfrxMasterData * DataBand;
    TfrxMemoView * Memo;

    // 清除报表
    frxReport1->Clear();

    // 在报表上添加一个数据集到数据集存取列表
    frxReport1->DataSets->Add(frxDBDataset1);

    // 添加“数据”页
    DataPage = new TfrxDataPage(frxReport1);

    // 添加一页
    Page = new TfrxReportPage(frxReport1);

    // 创建一个不重复的名称
    Page->CreateUniqueName();

    // 设置域大小, 纸张和默认的打印方向
    Page->SetDefaults();

    // 修改纸张的打印方向
    Page->Orientation = poLandscape;

    // 增加一个报表标题栏
    Band = new TfrxReportTitle(Page);
    Band->CreateUniqueName();

    // 为栏充分设置顶部坐标和高度
    // 在像素上包含坐标
    Band->Top = 0;
    Band->Height = 20;

    // 在报表标题栏加入一个对象
    Memo = new TfrxMemoView(Band);
    Memo->CreateUniqueName();
    Memo->Text = "Hello FastReport!";
    Memo->Height = 20;

    // 此对象将会被按照栏的宽度延展
    Memo->Align = baWidth;

    // 添加主数据栏
    DataBand = new TfrxMasterData(Page);
    DataBand->CreateUniqueName();

    DataBand->DataSet = frxDBDataset1;
    // 顶部坐标应该大于前边添加栏的顶部坐标+高度
    DataBand->Top = 100;
    DataBand->Height = 20;

    // 主数据上加入一个对象
    Memo = new TfrxMemoView(DataBand);
    Memo->CreateUniqueName();
    // 连接到数据

    Memo->DataSet = frxDBDataset1;
    Memo->DataField = "CustNo";
    Memo->SetBounds(0, 0, 100, 20);

    // 调整文本到右侧对象的空白
    Memo->HAlign = haRight;
    // 显示报表
    frxReport1->ShowReport(true);

    让我们来解释一些细节:
        所有在报表中使用的数据集都必须添加到数据源列表中,在我们示例中,是用frxReport1.DataSets.Add(frxDBDataSet1)这一行执行的。否则,报表就不会工作。
        数据页对于插入内部数据集是必要的,例如TfrxADOTable。这些数据集只能放在数据页。
        调用Page.SetDefaults不是必须的,因为在这个案例中页A4纸张设置和页边距都是0毫米。默认值设置10毫米页边距,并捕获打印机页大小和对齐方式。
        在增加栏到页面的同时,你要确认他们没有互相重叠在一起。要执行他,顶部和高度的坐标是相似的。总是要在设计器中定位相同的位置的。
     
    对象的坐标和大小是以像素为单位的,因为所有对象的left, Top, Width和Height属性都拥有扩展类型,你能够指出非整形值。下面常量用于转化像素到厘米和英寸:
    fr01cm = 3.77953;
    fr1cm  = 37.7953;
    fr01in = 9.6;
    fr1in  = 96;

    例如,一个栏的高度等于5毫米如下设定:
    Band.Height := fr01cm * 5;
    Band.Height := fr1cm * 0.5;

    12.代码中创建对话框
        我们知道,报表可以包含对话框窗体。下面的例子展示了如何创建一个带有OK按钮的对话框窗体:

    Pascal:

     { for working with dialogue objects the following unit should be used }

    uses frxDCtrl;

    var
      Page: TfrxDialogPage;
      Button: TfrxButtonControl;

    { 添加页 }
    Page := TfrxDialogPage.Create(frxReport1);
    { 创建唯一名称 }
    Page.CreateUniqueName;
    { 设置大小 }
    Page.Width := 200;
    Page.Height := 200;
    { 设定位置 }
    Page.Position := poScreenCenter;
     
    { 添加一个按钮 }
    Button := TfrxButtonControl.Create(Page);
    Button.CreateUniqueName;
    Button.Caption := 'OK';
    Button.ModalResult := mrOk;
    Button.SetBounds(60, 140, 75, 25);

    { 显示报表 }
    frxReport1.ShowReport;
     
    C++:

    //使用对话框对象工作,会用到下面的单元

    #include "frxDCtrl.hpp"

    TfrxDialogPage * Page;
    TfrxButtonControl * Button;

    //添加一页
    Page = new TfrxDialogPage(frxReport1);

    //创建唯一名称
    Page->CreateUniqueName();

    //设置大小
    Page->Width = 200;
    Page->Height = 200;

    //设定位置
    Page->Position = poScreenCenter;

    // 添加一个按钮
    Button = new TfrxButtonControl(Page);
    Button->CreateUniqueName();
    Button->Caption = "OK";
    Button->ModalResult = mrOk;
    Button->SetBounds(60, 140, 75, 25);

    //显示报表
    frxReport1->ShowReport(true);

     

     

    展开全文
  • FastReport.NET基础操作指南

    千次阅读 2018-03-01 11:52:03
    FastReport.Net 常用功能总汇一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表。系统在打印处理...

    FastReport.Net 常用功能总汇

    .常用控件

          文本框:输入文字或表达式

          表格:设置表格的行列数,输入数字或表达式

          子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表。系统在打印处理时,先按主报表打印,当碰到子报表时会自动转入子报表的页面进       行打印处理,完成后继续执行主报表打印的工作,所以我们又称之为嵌套报表。

          复选框:根据布尔表达式是否为ture来显示是否 √(如性别男女)

          条形码:绑定扫描码(如静滴单),一般TypeCode128 

                  交叉表:Matrix

                  页面设置:设置纸张大小及页边距

                  边框设置:设置是否显示上下左右边框以及边框线条的设置

                  边框宽度:下拉三角可以选择边框宽度设置

    .常用报表栏      

    报表标题区(ReportTitle):仅在第一页显示在纸张的上部。一般用于打印报表的标题等信息。

    报表合计(ReprotSummary):仅显示在所有数据的最后末尾。一般用于打印统计信息等。

    页眉(PageHeader):显示在每页的最上部。通过设置你可以让它置于报表抬头之上或者之下。一般用于打印页眉信息等。

    数据区(data):绑定数据源显示数据。

    数据首(Header):显示在所有数据源的最上部,仅打印一次。一般用于显示相关摘要信息,与页眉的区别是当该页无数据时,数据首的内容不显示且仅显示一次。

    数据尾(Footer):显示在所有数据源的最下部,仅打印一次。一般用于显示所有数据的合计信息。 

    栏首(ColumnHeader):显示在每页数据源的上部,它在每页均显示。因此一般用于打印数据源字段的栏目信息。

    栏尾(ColumnHeader):显示在每页数据源的下部,它在每页均显示。一般可用于统计显示每页数据的页合计信息。

    分组页眉(GroupHeader):用于显示分组数据,在每一个分组开始显示。

    分组页脚(GroupFooter):与群组首一一对应。一般用于显示分组数据的统计信息。

    页脚(PageFooter):显示在每页的最底部。一般用于打印页序等信息。

    .常用功能

    1.添加报表栏

    将光标置于“设置报表拦”弹出“段编辑器”,再选择添加或删除段。

    添加段的时候要注意:

         1)选择添加段的位置,如想添加子数据区,则选中要添加父数据区,点击添加“数据区”即可,如图所示:

                       

           

           2)若添加的数据区与原数据区平级,任选段(除数据区外),点击添加“数据区”即可,如图所示:

                       

             

    2.添加数据源

    选择菜单栏的“数据”,在下拉框中选中“选择数据源”,弹出“选择报表数据”框,里面会列出已经传出的数据源,勾选需要的数据源,点击确定,此时界面右边“数据”列表中即显示当前所选中的数据源,选中数据源,右键选择“查看数据”,即可显示当前数据源中所含有的数据:

                      

                     

     

    3.添加系统变量

    对于部分变量可能取自当前系统,如时间,页码,序号等,此时选择系统变量中相应的变量即可,如图:

                                                                   

    4.添加汇总

    对于一些报表,需要在数据尾添加合计行,此时需要手动添加合计,弹出汇总项编辑器,再在汇总项编辑器中添加汇总数据源。

                                            

    在汇总名称一栏可以自命名一个合计名称;

                                             

    在“数据列或公式”中可以选择汇总的数据源;

    在“计算段中每一列”可以选择参与汇总的数据区;

    在“计算满足下面条件的行”中可以做过滤,在写total时会出现计算某种类型的和,比如计算总人次分在职和退休之和,此时在写total时就需要写限制条件进行过滤。如[Table1.GRXZ]=="1";如图:

                                                             

    5.添加过滤、排序、分组

    双击数据区,弹出“编辑数据段”,可以进行数据源的选择、排序、过滤。如图:                                         

     

    .常用属性

    1.页面设置

    用于显示总的页数(TotalPages),例如:页脚显示 第1页/共20页。系统第一遍扫描报表时计算出TotalPages,然后第二遍实际 生成报表。如果不使用Double pass,则TotalPages返回0,所以必须设置report的属性doublepass为true;

    设置方法:点击报表树,单击报表树最顶端图标,点击属性,选择doublepass为true;也可直接在属性框中选择report,进行相关属性设置!如图:

                                              

    2.打印设置

    对于套打模板,样式在纸张上已经固定了(如处方笺、收费发票),只需要按照原定的样张将数据填充进去,在绘制的时候,需要用直尺良好尺寸,为了能够有一个更好的效果,一般把页面上已经存在不需要再打印出来的也画出来,但是需要设置属性“printable”为false:表示打印不显示,若想在预览的时候就不要看到那些不需要打印的,则需设置属性“Visible”为false:表示预览不显示。

    3.格式设置

    报表中有的数据需要按照规定的格式去显示,如需要把时间的格式改变一下,选中当前数据,右键单击,点击format(或在属性栏中选择 format),在弹出的选择格式框中选择需要的格式。若format中没有需要的格式,则需要在custom中自定义,比如我需要把时间设置为 2012-09-09 11:22:23,此时可以在custom中填时间显示格式:yyyy-MM-dd HH:mm:ss。注意有的需要显示上午还是 下午,表示上午下午的格式是tt,具体相关设置可以参照已存在的format进行编辑!如图:

                                                      

                  

    4.显示设置

    对于有些数据,名称较长,在行高固定的情况下,系统默认为自动换行,此时两者均不能完全显示不能完全显示,比如,此时按照客户的需求,若要求自动截断,则设置“WordWrap”为false(即不自动换行),若要求全部显示,则需要让该数据有按照单元格大小自动缩放功能,设置属性“AutoShrink”为fontsize或者fontwith

    5.边框设置

    边框可以通过工具栏设置,此时设置边框是根据外界框的大小来显示,下边框的设置也可以通过设置下划线,此时下边框的长度是根据数据显示的长度来决定,还可以设置属性“underline”为true,此时也是根据边框的大小来显示的。

    6.表格设置

    1)表格的行列数:通过属性设置ColumnCount(列)和RowCount(行)设置。

    2)合并/分割单元格:选中需要合并/分割的单元格,右键单击,选择“合并单元格”/“分割单元格”,如图:

                                                   

     

    3)插入行列:选中某行、某列,右键单击,选择需要插入的位置,如图:

                                        

     

    .常用代码

    1.在文本编辑器中编写

    Fastreport软件自身带了很多功能实现数据的转换,直接在编辑框中即可实现。

                                 

     

    常用的功能有:              

                                            选择语句IFF;控制语句Switch

                                 截取字符串语句SubString,在text列表中选择SubString

                                     截取时间语句Date&Time

                                             算数运算语句Mathematical:常用的有Abs(取绝对值)。

    注意,在运用这些function的时候,在文本编辑器右下角会显示当前功能的用法规则,如图:

    若当前数据类型不满足规则,则需要利用上面的转换语句,将其转换成与规则相符的数据类型,才能利用这些function,否则会报错。

     

    2.code区编写

    有些数据的转换在编辑器中不能直接实现,需要在code区域编写代码。写代码之前需要定义到相应的事件上:选中需要写代码的数据所在的报表拦,在属性设置中点击,在事件中双击需要用到的事件,自动跳转到code区,且会出现一行代码,类似于private void GroupHeader1_BeforePrint(object sender, EventArgs e)

        {

        }

    报表中常用事件有BeforePrint,AfterPrint。


    3.常用代码 

    1)Data1.InitDataSource();//数据初始化,用于数据跑两遍

    2)有的需要把年月日进行分离显示,此时需要选取时间并选择只显示时间的某部分,比如某个DateTime2类型的参数值为20120919,现需 要将其年月日分开,分别以__年__月__日显示,需要利用fastreport提供的功能进行分离,即1中的方法,但是注意此种方法只能用于数据类型为 datetime的数据;对于非datetime型的数据,可以写代码取位数或者进行强制转换,以string为例:

    private void ColumnFooter1_BeforePrint(object sender, EventArgs e)

        { 

          string  tbrq=  ((String)Report.GetColumnValue("Table1.TBRQ"));

          if (!String.IsNullOrEmpty(tbrq))

          {

           Text9.Text = tbrq.Substring(0,4) + "年" + tbrq.Substring(4,2) + "月"+tbrq.Substring(6,2)+"日";

          }//字符串型用SubString,Substring(0,4)表示从第0位开始,取出四位作为年。

    3)小数位的控制:可以用format对所有数据的小数位进行控制,但只对于数值型的数据才有效,但是对于string型的则需要用语句进行实现,如: 

    decimal sl= ((Decimal)Report.GetColumnValue("dtfee.Quantity"); 

    Cell51.Text=sl.ToString("0.00");// "0.00"若不填则按照默认值显示,后面多少个零显示出来的数据即为有 多少个小数;对于数量,有时要求要求有小数时则显示小数,无小数时则显示整数,此时只需要将"0.00"改为"0.##"即可,##的个数也是可以自定义 的,表示显示的最多的小数位。

     

    特殊功能汇总

     

    .打印中实现空表格填满剩余的空行,达到指定的行数。

     

    1.单页显示指定行数

    为了能让数据在未填满的前提下,该页也能显示指定的行数N,需要在数据区(data)添加子报表(child),且需要设置其属性最少数据行(CompleteToNRows)为N。

                                 

    2.按照数据行数显示指定行数

    按照1的设置,预览的时候会发现该操作只会控制首页满足条件,当数据的行数超过一页时,后面页均按照有多少数据显示多少行,此时需要写代码控制。

    如:

    private void PageHeader1_AfterPrint(object sender, EventArgs e)

    {      if (Engine.FinalPass)

          {

            Child1.CompleteToNRows = ((Int32)Report.GetVariableValue("TotalPages")) * 20;

          }//按照总页数*20来控制CompleteToNRows。

    }

    此时报表拦中的child区CompleteToNRows设置为1,如图:

    .本页合计和本期合计

    1.本页合计

    在每页均会显示,且统计当前页相关数据的和。此时勾选“打印后重置”项,再将合计项移到相应的位置即可。如图:

     

     

     

    2.本期小计

    在每页均会显示,但是指在数据的最后一页显示合计的数据,统计当前报表的所有数据和;需要写total来计算当前值,只是本期小计中打印后重置这个属性不勾选,由于本期小计只在最后一页显示数据,其他页面上数据区均为空,需要代码控制,例如:

    private void ColumnFooter1_BeforePrint(object sender, EventArgs e)

        {

          if(((Int32)Report.GetVariableValue("Page"))!= ((Int32)Report.GetVariableValue("TotalPages")))//设置显示本期小计需要的条件,即当前页与总页数相 一致的时候,开始显示数据,否则为空。

    .交叉表的用法 (演示)

    参照模板    收费员结账汇总报表.frx

    注意交叉表的行列宽度不需设置,自动按照数据长短进行设置。

    .套打模板(演示)

    参照模板   门诊挂号发票(套打).frx,处方笺(综合).frx

    挂号发票的模板

    注意,在周浦项目中,由于处方笺模板不一样,在医生工作站会根据选择调用不同的模板,此时是将几种不同的模板组合在一块,再根据标志调用相应的模板。

    .超链接模板(演示)

    报表&单据导入

    一. 单据导入

    单据即由开发直接传入数据源,在模块中实现单据的绘制。

    步骤:找到相对应的模块,点击打印,进入空白模板,再进行设计。对于已经绘制好的模板,可以直接导入,但注意,必须在本地把数据源清空,再导入,否则将会出现data区重复,导致命名出现异样,如data11

    有些模板即使清空数据源导入到模板,仍然会报错,则需要重新新建一个模板,再将原模板的东西复制进去即可。

    相关联的表有:select * from Common.ReportTemplate

    .报表导入

    报表即由存储过程实现,然后再对应到相应的存储过程,去存储过程中的数据。

    步骤:报表管理à新建报表à填写相应的信息后保存(演示)à绘制模板

    注意:填写信息时要绑定正确的存储过程,同时通过前台改变相应的界面显示效果。

    添加数据源:选择sql,再选择相应的存储过程,确定即可,对于新建的模板,模板一栏不需要选择,若选择了则会调用以前存在的模板,同时改动的话也会影响以前的模板。

    相关联的表有:

    select * from Common.Report 

    select * from Common.ReportDataSource

    select * from Common.ReportTemplate

    select * from Common.ReportFolder

    select * from Common.ReportParameter

     

    说明:fastreport自身带有Demo,里面很多功能都是可以供大家学习参考的。

    展开全文
  • .net FastReportd的说明

    千次阅读 2016-10-21 15:54:28
    三个dll,去网上找,FastReport.Bars.dll,FastReport.dll,FastReport.Editor.dll或者去所谓官网下 分两部:  1部.对报表的设计  2.部,在工程项目里面引用报表,为报表添加数据,然后打印报表。  ...

    这个东东是用做报表的

    然后是,可以快速方便的设计自己报表的格式

    支持任意水印和背景图片

    三个dll,去网上找,FastReport.Bars.dll,FastReport.dll,FastReport.Editor.dll或者去所谓官网下

    分两部:

      1部.对报表的设计           

     2.部,在工程项目里面引用报表,为报表添加数据,然后打印报表。

     FastReport.Report report = new FastReport.Report(); 

     report.Load(path);

      report.RegisterData(dataTb, this.Name);//
                report.PrintSettings.Printer =  prName;

              report.PrintPrepared();//准备打印

               report.PrintSettings.ShowDialog = false;//=不显示打印设置框,直接选择默认打印机 打印
                report.PrintSettings.Copies = 1;//打印份数设置
                EnvironmentSettings a = new EnvironmentSettings();
                a.ReportSettings.ShowProgress = false;
                report.Print();//打印  

    3.背景水印可以直接在打印的时候写上去

               ReportPage page = report.Pages[0] as ReportPage;
                    Watermark watermark = new Watermark();
                    watermark.Enabled = true;
                    watermark.Font = new Font(watermark.Font.FontFamily, (float)40, FontStyle.Bold);
                    watermark.Text = yymc;
                    watermark.Font = new Font(watermark.Font.FontFamily, (float)40, FontStyle.Bold);
                    page.Watermark = watermark;

    4.在填充数据的时候,注意名称要对应,不然会报错找不到字段数据

       xxx.frx文件的ReferenceName="prName"

    大概就是这样,具体设计报表样式可以参考.netFastReport里面的Demo.exe,基本上需要的格式都有


    展开全文
  • FastReport中文详细教程

    千次下载 热门讨论 2010-04-15 11:03:23
    指南将帮助你开始用FastReport创建报表,但它不能告诉你怎样使用其它基本的报表设计器。 如果你不熟悉报表设计器,我们建议你参考QuickReport的帮助系统。QuickReport的指南已经包含在你的Delphi拷贝中。QuickReport...
  • fastreport.net中新建数据源前需要先在c#程序中添加数据中的数据集,然后再增加字段,然后在fastreport.net中选择这个数据集就可以应用这个数据集中的字段对报表模板进行字段数据赋值 c#前台展示 先预览再下载 ...

    设置的图片大小和图片本身大小不一样时需要拉伸,修改SizeMode的值为StretchImage

    在fastreport.net中新建数据源前需要先在c#程序中添加数据中的数据集,然后再增加字段,然后在fastreport.net中选择这个数据集就可以应用这个数据集中的字段对报表模板进行字段数据赋值

    c#前台展示 先预览再下载

    layer.open({
                    type: 2,
                    title: '生成word',
                    offset: 'auto',
                    shadeClose: false,
                    shade: 0.8,
                    area: ['80%', '98%'],
                    content: '/GridMember/Export?gridMemberID=' + id
                });

    c#后台方法

    public ActionResult Export(int gridMemberID)
            {
                object path = "";         //文件路径变量
                string message="";   //文本内容变量
                Stream str = null;
                try
                {
                        if (!Directory.Exists(Server.MapPath((string)path)))
                        {
                            Directory.CreateDirectory(Server.MapPath((string)path));
                        }
                        if (string.IsNullOrEmpty(memberInfo.ImageUrl))
                        {
                            throw new Exception("请先上传图片");
                        }
                        WebReport webReport = new WebReport();
                        FastReport.Report report = webReport.Report;
                        report.Load(Server.MapPath("/Content/FastReports/GridMember.frx"));
                        report.SetParameterValue("QRPicture", Convert.ToBase64String(streamByte));
    
                        MemoryStream strm = new MemoryStream();
    
                        report.Prepare();
                        
                        report.Export(new PDFExport(), strm);//PDFExport//ImageExport()
                        strm.Position = 0;
                        str = strm;
                }
                catch (Exception ex)
                {
                }
                return File( str, "Application/PDF");//Application/PDF//image/jpeg
            }

    直接下载

    前台方法:

    window.open('/GridMember/Export?gridMemberID=' + id);

    后台方法:

    public ActionResult Export(int gridMemberID)
            {
                object path = "";         //文件路径变量
                Stream str = null;
                try
                {
                        MemoryStream strm = new MemoryStream();
    
                        report.Prepare();
                        
                        report.Export(new PDFExport(), strm);//PDFExport//ImageExport()
                        strm.Position = 0;
                        //FileStream fs = new FileStream(filePath, FileMode.Open);
                        byte[] bytes = new byte[(int)strm.Length];
                        strm.Read(bytes, 0, bytes.Length);
                        strm.Close();
                        Response.Charset = "UTF-8";
                        Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
                        Response.ContentType = "application/octet-stream";
    
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + memberInfo.GridMemberName+".pdf");
                        Response.BinaryWrite(bytes);
                        Response.Flush();
                        Response.End();
                    }
                }
                catch (Exception ex)
                {
                }
                return new EmptyResult();
            }

     

    展开全文
  • fastreport5破解版 V5.2.3

    千次阅读 2018-05-17 09:58:01
    fastreport是一款由国外团队开发的功能全面的数据报表软件,目前这款软件是基于windows系统使用,可以帮助用户对目标数据文件进行准确全面地分析,让用户对数据的变化趋势有一个准确的了解。很多世界知名企业都会...
  • Winform开发中使用FastReport基本操作打印报表与设计按钮,设计报表。
  • FastReport

    2018-07-12 18:07:22
    支持fr3 格式文档的查阅,FastReport是功能齐全的报表控件,使开发者可以快速并高效地为·NET/VCL/COM/ActiveX应用程序添加报表支持。
  • fastreport

    2018-12-14 08:43:55
    fastreport快速报表开发工具,基于C#技术开发。 破解版
  •  件来实现快速灵活的报表制作和打印,其中有名的控件是FR-Software & A.Tzyganenko 的FastReportFastReport提  供了能与DELPHI无缝集成的从设计到打印的完整控件包,提供的设计界面友好灵活,对于开发可让用户...
  • FastReport6

    2019-01-13 08:04:47
    FastReport Professtional 6源码安装版,完全破解,找了很久终于找到可以用的并完美支持二维码和打印为PDF的,经本人测试完美安装正常使用,需要的小伙伴们可以拿去。 安装方法,解压文件 1. 关闭开发工具。 2. 右键...
  • FastReport .net 中文详细教程及Demo

    热门讨论 2013-01-11 14:02:04
    指南将帮助你开始用FastReport创建报表,但它不能告诉你怎样使用其它基本的报表设计器。 如果你不熟悉报表设计器,我们建议你参考QuickReport的帮助系统。QuickReport的指南已经包含在你的Delphi拷贝中。...
  • FastReport FAQ

    千次阅读 2011-01-11 16:24:00
    FastReport FAQ 常见问题汇总
  • 最新版FastReport.Net V2013.2.5 For .Net4.0(破解版)

    千次下载 热门讨论 2013-04-12 11:02:07
    1.版本为FastReport.Net V2013.2.5 For .Net4.0 2.已去除导出与打印5页限制,去除导出与打印所带的DEMOVERSION水印. 3.如果要集成到VS开发环镜,去官网下个DEMO先安装,然后再复盖破解版本 4.本软件自带多语言版本,...
  • fastreport4 实例中文教程

    热门讨论 2011-12-13 19:24:58
    2.6、FastReport中的Bands 25 2.7、Data Band 26 2.8、TfrxDBDataSet组件 27 2.9、“客户列表”报表 27 2.10、通过text组件显示数据表字段 29 2.11别名 30 2.12、变量。 30 2.13、“Picture”控件 32 2.14、...
  • FastReport 6.6.17 Enterprise Source Code for Delphi7 and Delphi27 (10.4 Sydney) FastReport Package Simplification Management Toolkit by xander.xiao@gmail.com, version 2.0, 2020-5-27 What is Package ...
1 2 3 4 5 ... 20
收藏数 4,261
精华内容 1,704
关键字:

fastreport