KNOWLEDGE BASE
Log In    |    Knowledge Base    |    4D Home
Tech Tip: Customizing collection/entity listbox to always have an existing row selected
PRODUCT: 4D | VERSION: 17 | PLATFORM: Mac & Win
Published On: October 10, 2019

There is a way to customize an collection/entity based listbox to always have a row selected which can be useful if there are other form elements dependent on the currently selected row and prevents selecting an empty/null row. In this example, a listbox will display 5 items where the last selected row position will be stored in form data Form.lastPos. The listbox property window is shown below for more context:



Firstly, the form's On Load event will initialize the entity selection listbox and default the selected row position to 1.

// Form1 method

Case of
   : (Form event=On Load)
   Form.categories:=ds.Category.all()
  
   Form.lastPos:=1
   LISTBOX SELECT ROW(*;"category_LB";Form.lastPos)
  
End case




Next, the listbox's On Click event will contain code that checks whether the user clicked on a non-empty row. If an existing row is clicked, the last selected row position Form.lastPos is set to the current row position Form.currPos. If an empty/null row is clicked, simply force the listbox to select/highlight the row of the last selected row position as shown below:

// Listbox method

Case of
   : (Form event=On Clicked)
   If (Form.currItem#Null)
      Form.lastPos:=Form.currPos
   Else
      LISTBOX SELECT ROW(*;"category_LB";Form.lastPos)
   End if
  
End case


Now whenever the user clicks on an empty row, the last selected row position will stay highlighted.