ON ROW CHANGE block
The ON ROW CHANGE block is executed in a list controlled by an INPUT
 ARRAY, when leaving the current row and when the row has been modified since it got  
the focus. This is typically used to detect row modification.
The code in ON ROW CHANGE will not be executed when leaving new rows created
by the user with the default append or insert action. To detect row creation, you must use the
BEFORE INSERT or AFTER INSERT control blocks.
The ON ROW CHANGE block is only executed if at least one field value in the
current row has changed since the row was entered, and the modification flag of the field is set.
The modified field(s) may not be the current field, and several field values can be changed. Values
may have been changed by the user or by the program. The modification flag is reset for all fields
when entering another row, when going to another sub-dialog, or when leaving the dialog
instruction.
ON ROW CHANGE is executed after the AFTER FIELD block
and before the AFTER ROW block.
When called in this block, DIALOG.getCurrentRow() / arr_curr() return the index of the current row that has
been changed.
You can, for example, code database modifications (UPDATE) in the
ON ROW CHANGE block:
 INPUT ARRAY p_items FROM s_items.*
    ...
    ON ROW CHANGE
      LET r = DIALOG.getCurrentRow("s_items")
      UPDATE items SET
              items.item_code        = p_items[r].item_code,
              items.item_description = p_items[r].item_description,
              items.item_price       = p_items[r].item_price,
              items.item_updatedate  = TODAY
             WHERE items.item_num = p_items[r].item_num