DISPLAY ARRAY dynamic dialog
DISPLAY ARRAY can be implemented with dynamic dialogs.
Row data methods for DISPLAY ARRAY dynamic dialog
To append, insert, delete the data rows of a DISPLAY ARRAY list dialog with the
dynamic dialog API, use the appendRow(), insertRow(), deleteRow(), deleteAllRows() methods of the ui.Dialog class.
To set/get the values of the cells of a given row, first call setCurrentRow(), then set the
cell values with setFieldValue() or getFieldValue(). If the row does not yet exist, use
appendRow() or insertRow() before
setCurrentRow().
Code example
The following example implements a singular list dynamic dialog.
Form definition file form.per:
LAYOUT
TABLE table1
{
[c11 |c12 ]
[c11 |c12 ]
[c11 |c12 ]
[c11 |c12 ]
}
END
END
ATTRIBUTES
EDIT c11 = FORMONLY.cust_id, TITLE="Num";
EDIT c12 = FORMONLY.cust_name, TITLE="Name";
END
INSTRUCTIONS
SCREEN RECORD sr(FORMONLY.*);
ENDProgram file main.4gl:
TYPE t_fields DYNAMIC ARRAY OF RECORD
name STRING,
type STRING
END RECORD
MAIN
DEFINE d ui.Dialog
DEFINE t STRING
DEFINE fields t_fields
DEFINE x INT
OPEN FORM f1 FROM "form"
DISPLAY FORM f1
LET fields[1].name = "cust_id"
LET fields[1].type = "INTEGER"
LET fields[2].name = "cust_name"
LET fields[2].type = "VARCHAR(50)"
LET d = ui.Dialog.createDisplayArrayTo(fields,"sr")
CALL d.addTrigger("ON ACTION re_fill")
CALL d.addTrigger("ON ACTION add_row")
CALL d.addTrigger("ON ACTION del_row")
CALL d.addTrigger("ON ACTION clear_all")
CALL d.addTrigger("ON ACTION accept")
CALL fill_rows(d,10)
WHILE (t := d.nextEvent()) IS NOT NULL
CASE t
WHEN "ON ACTION re_fill"
CALL fill_rows(d,100)
CALL d.setCurrentRow("sr",1)
WHEN "ON ACTION add_row"
CALL add_row(d)
WHEN "ON ACTION del_row"
CALL d.deleteRow("sr",d.getCurrentRow("sr"))
WHEN "ON ACTION clear_all"
CALL d.deleteAllRows("sr")
WHEN "ON ACTION accept"
CALL d.accept()
WHEN "AFTER DISPLAY"
EXIT WHILE
END CASE
END WHILE
CALL d.close()
END MAIN
FUNCTION fill_rows(d ui.Dialog, cnt INT)
DEFINE x INTEGER
CALL d.deleteAllRows("sr")
FOR x=1 TO cnt
CALL d.appendRow("sr")
CALL d.setCurrentRow("sr",x)
CALL d.setFieldValue("sr.cust_id",x)
CALL d.setFieldValue("sr.cust_name",SFMT("Name %1",x))
END FOR
END FUNCTION
FUNCTION add_row(d ui.Dialog)
DEFINE x INTEGER
CALL d.appendRow("sr")
LET x = d.getArrayLength("sr")
CALL d.setCurrentRow("sr",x)
CALL d.setFieldValue("sr.cust_id",x)
CALL d.setFieldValue("sr.cust_name",SFMT("New %1",x))
END FUNCTION