使用報表變量時,引用「frxVariables」單元。 變量定義在「TfrxVariable」 類:express
TfrxVariable = class(TCollectionItem)ide
publishedthis
property Name: String; //Name of a variablespa
property Value: Variant; //Value of a variableorm
end;對象
變量列表在「TfrxVariables」 類,有全部相關的方法:事件
TfrxVariables = class(TCollection)ip
publicci
function Add: TfrxVariable; //Adds a variable to the end of the liststring
function Insert(Index: Integer): TfrxVariable; //Adds a variable to the given position of the list
function IndexOf(const Name: String): Integer; //Returns the index of a variable with the given name
procedure AddVariable(const ACategory, AName: String; const AValue: Variant); //Adds a variable to the specified category
procedure DeleteCategory(const Name: String); //Deletes a category and all its variables
procedure DeleteVariable(const Name: String); //Deletes a variable
procedure GetCategoriesList(List: TStrings; ClearList: Boolean = True); //Returns the list of categories
procedure GetVariablesList(const Category: String; List: TStrings); //Returns the list of variables in the specified category
property Items[Index: Integer]: TfrxVariable readonly; //The list of variables
property Variables[Index: String]: Variant; default; //Values of variables
end;
若是變量的列表很長,能夠按類別分組。例如,當有下列變量列表:
Customer name
Account number
in total
total vat
能夠使用如下方式:
Properties
Customer name
Account number
Totals
In total
total vat
有如下侷限:
- 必須建立至少一個類別
- 類別在data tree下層, 變量在第二層
- 類別不能嵌套
- 變量的名稱必須是惟一的,在總體列表中,而不是在一個類別中
A link to the report variables is stored in the 「TfrxReport.Variables」 property. To create a list manually, the following steps must be performed:
- clear the list
- create a category
- create variables
- repeat the 2 and 3 steps to create another category
It is performed with the help of the 「TfrxVariables.Clear」 method:
frxReport1.Variables.Clear;
必需至少建立一個類別, 類別和變量保存在一個list。 類別不一樣於變量是以一個空格開始,這是名字的第一個符號.全部的變量都是屬於這一類別。
有兩個方法添加類別:
frxReport1.Variables[' ' + 'My Category 1'] := Null;
or
var
Category: TfrxVariable;
Category := frxReport1.Variables.Add;
Category.Name := ' ' + 'My category 1';
添加變量必須在類別添加之後, 在列表中變量名必須惟一, 而且必須在類別中。
這裏有幾個方法添加變量到列表:
frxReport1.Variables['My Variable 1'] := 10; // 添加(若是不存在) 或修改一個變量的值。
var
Variable: TfrxVariable;
Variable := frxReport1.Variables.Add;
Variable.Name := 'My Variable 1';
Variable.Value := 10;
以上2個方法都把變量添加到列表最後, 所以, 添加到最後的類別. 若是想添加到列表的指定位置,使用「Insert」 方法:
var
Variable: TfrxVariable;
Variable := frxReport1.Variables.Insert(1);
Variable.Name := 'My Variable 1';
Variable.Value := 10;
添加到指定的類別,使用「AddVariable」 方法:
frxReport1.Variables.AddVariable('My Category 1', 'My Variable 2', 10);
frxReport1.Variables.DeleteVariable('My Variable 2');
frxReport1.Variables.DeleteCategory('My Category 1');
你能夠在TfrxReport.Script中定義腳本變量,用來代替report變量, 看看 report變量和 script變量的不一樣:
Report variables |
Script variables |
|
位置 |
In the report variables list, TfrxReport.Variables. |
In the report script, TfrxReport.Script.Variables. |
Variable name |
May contain any symbols. |
May contain any symbols. But if you want to use that variable inside the report script, its name should conform to Pascal identificator specifications. |
Variable value |
May be of any type. Variables of string type are calculated each time you access them, and are, in itself, an expressions. |
May be of any type. No calculation is performed, behavior is like standard language variable. |
可訪問性 |
Programmer can see the list of report variables in the "Data tree" window. |
The variable is not visible, programmer should know about it. |
Working with script variables is easy. Just assign value to the variable this way:
frxReport1.Script.Variables['My Variable'] := 'test';
In this case FastReport will create a variable if it is not exists, or assign a value to it. There is no need to use extra quotes when assigning a string to that variable.
最後一種傳遞值到報表中的方法是使用 TfrxReport.OnGetValue 事件,這個方式能夠獲得動態值,之前的方法經過靜態值。
舉例說明使用方法. 報表中放一個文本對象,輸入如下內容:
[My Variable]
建立 TfrxReport.OnGetValue 事件:
procedure TForm1.frxReport1GetValue(const VarName: String; var Value: Variant);
begin
if CompareText(VarName, 'My Variable') = 0 then
Value := 'test'
end;
運行報表,咱們看到變量是顯示正確的。 事件TfrxReport.OnGetValue 在遇到全部未知變量時調用 。