Each of the browse columns is an object in its own right, with its own handle. If you want to set individual column attributes at run time (for example, to enable columns for update), you set those attributes through the handle. Static browse columns are objects with handles as well, but you can also access those by name. Dynamic browse columns, like other dynamic objects, have no name, so you must use their handle.

Note: To make a dynamic browse column updateable, set its READ-ONLY attribute to false. Browse columns do not use the SENSITIVE attribute.

The browse FIRST-COLUMN attribute returns the handle to the first (leftmost) column in the browse. Each column’s NEXT-COLUMN attribute returns the handle of the column next to it. For example, you can add this block of code to the OlineFields LEAVE trigger:

  /* You can use code such as this to navigate through
  the columns of a browse dynamically. */
  DEFINE VARIABLE hCol AS HANDLE NO-UNDO.
  DEFINE VARIABLE cCols AS CHARACTER NO-UNDO.
  hCol = hBrowse:FIRST-COLUMN.
  DO WHILE VALID-HANDLE(hCol):
    cCols = cCols + CHR(10) + hCol:LABEL. /* CHR(10) is a line feed. */
    hCol = hCol:NEXT-COLUMN.
  END.
  MESSAGE cCols. 

When you run the procedure again and select fields, the following figure shows what you see.