Loading a ComboBox List

A ComboBox presents a list of values in a dropdown box on a form. The values are for the underlying formfield. For example, the following form specification file contains a ComboBox that represents the formfield customer.state:
01 SCHEMA custdemo 
02 LAYOUT
03 GRID 
04  {
05   Store #:[a0  ]
06      Name:[a1                 ]
07     State:[a5      ]
08  }
09  END -- GRID
10 END
11 TABLES customer 
12 ATTRIBUTES
13  EDIT a0=customer.store_num; 
14  EDIT a1=customer.store_name;
15  COMBOBOX a5=customer.state;
16 END

During an INPUT, INPUT ARRAY or CONSTRUCT statement the ComboBox is active, and the user can select a value from the dropdown list. The value selected will be stored in the formfield named customer.state.

Getting a reference to the object

The ComboBox class contains methods that manage the values for a ComboBox. In order to use these methods you must first obtain a reference to the ComboBox object:

Once you have a reference to the ComboBox object, you can call any of the methods defined in the class as object methods:

See the The ComboBox class documentation in the Genero Business Development Language User Guide for a complete list of the methods.

Adding values to the ComboBox from a Database Table

An example in Tutorial Chapter 5 GUI Options loads a ComboBox with static values. The following example retrieves the valid list of values from a database table (state) instead:

Example 6

01 SCHEMA custdemo 
02 MAIN
03  DEFINE cb ui.ComboBox 
04  CONNECT TO "custdemo"
05  OPEN WINDOW w1 WITH FORM "testcb"
06  LET cb = ui.ComboBox.forName("customer.state")
07  IF cb IS NOT NULL THEN
08   CALL loadcb(cb)
09  END IF
10 ...
11 END MAIN
12
13 FUNCTION loadcb(cb)
12  DEFINE cb ui.ComboBox,
13         l_state_code LIKE state.state_code,
14         l_state_name LIKE state.state_name 
15
18  DECLARE mycurs CURSOR FOR 
19    SELECT state_code, state_name FROM state 
20  CALL cb.clear()
21  FOREACH mycurs INTO l_state_code, l_state_name 
22  -- provide name and text for the ComboBox item 
23   CALL cb.addItem(l_state_code,l_state_name)
24  END FOREACH
26 END FUNCTION
This figure is a screenshot of a ComboBox loaded with data from the state table.

Figure 1. Loaded combobox

As an alternative to calling the loadcb function in your BDL program, this function can be specified as the initializer function for the ComboBox in the form specification file. When the form is opened, The initializer function is called automatically and a reference to the ComboBox object is passed to it. Provide the name of the initializer function in lowercase:

ATTRIBUTES 
COMBOBOX a5=customer.state, INITIALIZER = loadcb;