(Graphical interfaces only)
Creates a dynamic read-only browse widget or a dynamic updatable browse widget. Add browse columns to the widget with the ADD-LIKE-COLUMN, ADD-COLUMNS-FROM, and ADD-CALC-COLUMN methods. Specify the query for the widget with the QUERY attribute.
The dynamic updatable browse can only be a NO-ASSIGN browse—you must make all data assignments to the database.
| CREATE BROWSE handle
[ IN WIDGET-POOL widget-pool-name ]
[ ASSIGN { attribute=expression } ... ]
[ trigger-phrase ] | 
The following example creates a dynamic browse and adds columns to it:
r-dynbrws.p
| /* r-dynbrws */
DEFINE VARIABLE name-hdl       AS HANDLE  NO-UNDO.
DEFINE VARIABLE num-hdl        AS HANDLE  NO-UNDO.
DEFINE VARIABLE address-hdl    AS HANDLE  NO-UNDO.
DEFINE VARIABLE calc-col-hdl   AS HANDLE  NO-UNDO.
DEFINE VARIABLE browse-hdl     AS HANDLE  NO-UNDO.
DEFINE VARIABLE buff-field-hdl AS HANDLE  NO-UNDO.
DEFINE VARIABLE brws-col-hdl   AS HANDLE  NO-UNDO.
DEFINE VARIABLE jx             AS INTEGER NO-UNDO.
DEFINE BUTTON btn-delete LABEL "Delete".
DEFINE BUTTON btn-quit   LABEL "&Quit"  AUTO-ENDKEY.
DEFINE FRAME MyFrame SKIP(10)
  btn-delete btn-quit
  WITH SIZE 80 BY 22.
DEFINE QUERY q1 FOR Customer SCROLLING. 
OPEN QUERY q1 FOR EACH Customer NO-LOCK.
CREATE BROWSE browse-hdl
  ASSIGN 
    TITLE     = "Dynamic Browse"
    FRAME     = FRAME MyFrame:HANDLE
    QUERY     = QUERY q1:HANDLE
    X         = 2
    Y         = 2
    WIDTH     = 74
    DOWN      = 10
    VISIBLE   = YES
    READ-ONLY = NO
    SENSITIVE = TRUE.
ON ROW-DISPLAY OF browse-hdl DO:
  IF VALID-HANDLE(calc-col-hdl) THEN
    calc-col-hdl:SCREEN-VALUE = 
      STRING(Customer.CreditLimit - Customer.Balance).
END.
ASSIGN
  num-hdl      = browse-hdl:ADD-LIKE-COLUMN("Customer.CustNum").
  name-hdl     = browse-hdl:ADD-LIKE-COLUMN("Customer.Name").
  address-hdl  = browse-hdl:ADD-LIKE-COLUMN("Customer.Address").
  calc-col-hdl = browse-hdl:ADD-CALC-COLUMN("INT","->,>>>,>>9.99","",
    "Credit Left").
/* Refresh needs to be done if ADD-CALC-COLUMN is done after the browse is
   displayed. In ROW-DISPLAY trigger, we can only set the calc field's
   screen-value if the handle is set. And the handle is set after the 
   ADD-CALC-COLUMN method is done. */
browse-hdl:refresh().
browse-hdl:EXPANDABLE = YES.
ON ROW-LEAVE OF browse-hdl DO:
  IF browse-hdl:CURRENT-ROW-MODIFIED THEN DO:
    REPEAT jx = 1 TO browse-hdl:NUM-COLUMNS:
      brws-col-hdl = browse-hdl:GET-BROWSE-COLUMN(jx).
      IF brws-col-hdl:MODIFIED THEN DO:
        buff-field-hdl = brws-col-hdl:BUFFER-FIELD.
        /* If buff-field-hdl is unknown, this is a calculated field and cannot
           be updated */
        IF buff-field-hdl NE ? THEN
          buff-field-hdl:BUFFER-VALUE = brws-col-hdl:SCREEN-VALUE.
      END.
    END.
  END.
END.
ON CHOOSE OF btn-delete DO:   /*  LABEL "DeleteDynBrowse". */
  DELETE WIDGET browse-hdl.
END.
ON CHOOSE OF btn-quit DO:
  QUIT.
END.
ENABLE ALL WITH FRAME MyFrame.
WAIT-FOR CLOSE OF CURRENT-WINDOW. | 
For more information about the WIDGET-ID attribute, see its reference entry in the Handle Attributes and Methods Reference. For more information about the Use Widget ID (-usewidgetid) startup parameter, see OpenEdge Deployment: Startup Command and Parameter Reference.