Binding scrollgrids to arrays in dialogs
Program arrays act as data model that are bound to form scrollgrids, when implementing list dialogs.
Identifying list views in program dialogs
In list dialogs such as the INPUT ARRAY
or DISPLAY ARRAY
, the
screen array identifies the record list element in the current form to be bound to the program array
used by the dialog.
INPUT ARRAY
uses the custlist
screen array
of the form, and binds the custarr
program ARRAY
with the
code:INPUT ARRAY custarr FROM custlist.*
The screen array members are associated with the program array record members by position. The order and number of the screen array elements is important as they are bound by position to the members of the program array.
The position of the SCROLLGRID
fields, however, can differ from the members of
the screen array and program array.
To omit fields in the SCROLLGRID
layout, yet include them in the definition of
the screen array, and define the fields as PHANTOM
fields in the form definition file. The program array can then be
defined from the database table definition with the DEFINE LIKE
instruction:
DEFINE custarr DYNAMIC ARRAY OF RECORD LIKE customer.*
ARRAY OF RECORD / END
RECORD
. However, the array can be structured with sub-records and still be used with a list
dialog. This is especially useful when you need to define arrays from database tables, and
additional information needs to be managed at runtime (for example to hold image resource for each
row, to be displayed with the IMAGECOLUMN
attribute):SCHEMA shop
DEFINE a_items DYNAMIC ARRAY OF RECORD
item_data RECORD LIKE items.*,
it_image STRING,
it_count INTEGER
END RECORD
...
DISPLAY ARRAY a_items TO sr.*
...
Defining screen arrays
The SCROLLGRID
container is bound to a screen array defined in the
INSTRUCTIONS
section, by the name of the form fields used in the screen array
definition.
ATTRIBUTES
section as form fields:LAYOUT
SCROLLGRID (WANTFIXEDPAGESIZE = NO)
{
Id: [f1 ]
Name: [f2 ][f3 ]
}
END
END
...
ATTRIBUTES
EDIT f1 = customer.cust_num;
EDIT f2 = customer.cust_fname,
EDIT f3 = customer.cust_lname;
...
INSTRUCTIONS
section in a SCREEN RECORD
definition.INSTRUCTIONS
SCREEN RECORD custlist( cust_num, cust_fname, cust_lname );
END