使用FastReport 3.0及以上版本建立動態報表的

來源:互聯網
上載者:User
1.已經產生的報表儲存到流中,再從流中取出
  TfrxReport.PreviewPages.SaveToStream(TStream);
  TfrxReport.PreviewPages.LoadFromStream(TStream);

2.把變數添加到報表中
  with frxReport1 do
  begin
    with Variables do
    begin
      Category:=Add;
      Category.Name := ' ' + '自訂變數1';      //注意!!第一個' '內是一個空格!!如果沒有空格,不能正確添加分類
      with Add do Name := ' ' + '自訂變數2';   //更簡化的格式
      AddVariable('自訂變數1', '變數11', QuotedStr('大寫金額'));
      AddVariable('自訂變數1', '變數12', QuotedStr('大寫金額'));
      AddVariable('自訂變數1', '變數13', QuotedStr('大寫金額'));
      AddVariable('自訂變數2', '變數21', 1880);
      AddVariable('自訂變數2', '變數22', QuotedStr('大寫金額'));
      AddVariable('自訂變數2', '變數23', QuotedStr('大寫金額'));
    end;
  end;

3.動態添加資料集,要注意!!!!!
在取報表格式之前,應該先把資料集對象放好,這樣才能保證在報表控制項在取格式檔案後,
安置報表對象時,可以拿到資料對象,如果操作順序搞反了,則報表對象就無法
拿到資料對象,在預覽資料時,就會產生“沒有資料集”的錯誤了!!
var
  tmpDataSet: T資料集;
  DataSource: TDataSource;
  frxDBDataSet: TfrxDBDataset;
begin
  tmpDataSet:=T資料集.Create(Self);
  DataSource:=TDataSource.Create(Self);
  frxDBDataSet:=TfrxDBDataset.Create(Self);

  DataSource.DataSet:=tmpDataSet;
  frxDBDataSet.DataSource:=DataSource;
  //frxDBDataSet.DataSet:=tmpDataSet;    //這條語句與上一條都可用,我也不知道區別在哪
  frxDBDataSet.UserName:='資料項目名稱';    //好用在於可以用中文名
  frxReport1.DataSets.Add(frxDBDataSet);
-------------注意:在把報表格式LoadFromFile或LoadFromStream之前,必須完成上面這幾條語句的程式!!!!

4.將報表設定資料儲存到流中,只要設定TfrxDesigner.OnSaveReport就可以了,但不知道這東西怎麼和Report聯結起來的,只需要在介面上放一個控制項就OK了,怪怪的,不過挺爽
  
5.自訂預覽視窗
  通過引用frxPreview來建立繼承類TfrxPreview,然後在繼承的類中加入自己的特性,這樣是最省事的了

6.處理順序的信條(真理):假設報表範本是儲存在資料庫中的
a.必須在把報表範本提取出來前,把表對象注入資料中,否則在預覽時就知錯
b.必須在在把報表範本提取出來後,再把動態變數加到報表中,否則看不到變數存在
這兩個順序必須當信條來理解,至於什麼原因,偶還沒空看FastReport的來源程式咧,嘿嘿~~,這兩個處理機制可是偶經過了N多失敗之後才發現的哦

7.添加自訂函數
a.建立自己的函數,可以是類的成員函數(要注意執行個體化類喲),也可以是全域函數
b.用TfrxReport.AddFunction把函數加到註冊項中,注意,必須是函數的完整定義,比如,你的函數是:
   function MyFunction(Para0: Float): string;
 那麼AddFunction格式應該這樣:
   frxReport1.AddFunction('function MyFunction(Para0: Float): string','自訂函數','');
c.必須在TfrxReport.OnUserFunction中對函數的傳回值進行處理,否則在報表中即使寫的格式正確,也沒有傳回值,這是必須注意的

8.在自訂函數中使用報表中的對象
a.建立自訂函數

function TForm1.GetCrossObject(CrossObj: TfrxCustomCrossView): string;
begin
  // 取資料對象
  Result:='行數:'+IntToStr(CrossObj.Matrix.RowCount);
end;

b.註冊函數,可以在Form1.Create時註冊哦

  with frxReport1 do
  begin
    AddFunction('function GetCrossObject(CrossObj: TfrxCustomCrossView): String',
      '擴充函數', '');
  end;

c.必須在TfrxReport.OnUserFunction中對函數的傳回值進行處理

function TForm1.frxReport1UserFunction(const MethodName: String;
  var Params: Variant): Variant;
begin
  if UpperCase(MethodName)=UpperCase('GetCrossObject') then
    Result:=GetCrossObject(TfrxCustomCrossView(Integer(Params[0])));  //類型轉換才能編譯通過哦  
end;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.