Skip to Content

Did you know that you can protect a Grid from editing without coding any event?

Estimated Reading Time: 1 Minutes

When a Grid resource (row, column or cell) has to be protected from editing, it's normal practice to
1. assign an event procedure to the Grid (if not yet available),
2. insert the handling of the MSG-BEGIN-ENTRY event,
3. check if the X/Y coordinates that generated the events match with the area you wish to protect and, if so
4. Make the event fail by setting the EVENT-ACTION registry

Despite not beeing wrong, this approach is not optimized especially in a thin client environment, as it generates client/server traffic for the event handling (the UI on the client informs the runtime on the server that an event occurred, the runtime responds that the event should fail and so the UI makes it fail).
There is a quicker and more optimized approach to protect a Grid area from editing. You can do it by setting one of the following properties to the value of "1".
- PROTECTION (to protect the whole Grid),
- ROW-PROTECTION (to protect one or more rows),
- COLUMN-PROTECTION (to protect one or more columns),
- CELL-PROTECTION (to protect one or more cells)

So, a code like this (written in the Grid Event Procedure):

  evaluate event-type
  when msg-begin-entry
  |first two columns are read-only
       evaluate event-data-1
       when 1
            set event-action to event-action-fail
       when 2
            set event-action to event-action-fail
       end-evaluate
  end-evaluate

Can be changed to:

  |first two columns are read-only
  modify screen-1-gr-1 x = 1, column-protection = 1
  modify screen-1-gr-1 x = 2, column-protection = 1

(written in the program Procedure Division, after the DISPLAY of the Grid)
And your program will be more optimized.

Did you know that you can protect a Grid from editing without coding any event?