data_change с использованием cl_salv_table - не реагирует на клавишу Enter - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу заполнить поле, когда другое поле было отредактировано.Так что это метод в реализации.

Когда я нажимаю Enter, ничего не происходит, но когда я дважды щелкаю, изменения применяются.

Есть идеи или исправления?Я использую класс cl_salv_table.

METHOD data_changed_finished.
DATA: ls_inr   TYPE LINE OF lvc_t_modi,
      lv_stbl  TYPE lvc_s_stbl,
      gt_out type standard table of SPFLI,
      ls_out   LIKE LINE OF gt_out.


LOOP AT et_good_cells INTO ls_inr
  WHERE fieldname = 'CITYFROM'. 
  EXIT.
ENDLOOP.

DATA:
  ld_REFRESH_MODE TYPE SALV_DE_CONSTANT ,
  ld_S_STABLE TYPE LVC_S_STBL.
  ld_S_STABLE-row = 'X'.
  ld_S_STABLE-col = 'X'.

IF sy-subrc = 0.
  LOOP AT et_good_cells INTO ls_inr.
    LOOP AT IT_SPFLI INTO ls_out
                   FROM ls_inr-row_id
                   TO ls_inr-row_id.

      ls_out-DISTANCE = '556'.
      MODIFY IT_SPFLI FROM ls_out.

    ENDLOOP.
  ENDLOOP.

ENDIF.


  lv_stbl-row = 'X'.
  lv_stbl-col = 'X'. 

  ld_S_STABLE-row = 'X'.
  ld_S_STABLE-col = 'X'.
  ld_REFRESH_MODE = 2. 

  CALL METHOD salv->REFRESH(
  EXPORTING
  REFRESH_MODE = ld_REFRESH_MODE
  S_STABLE = ld_S_STABLE ).

ENDMETHOD.

1 Ответ

0 голосов
/ 21 ноября 2018

Итак, как я сказал в комментариях, для меня очевидно, что вопрос больше о CL_GUI_ALV_GRID (не CL_SALV_TABLE).По умолчанию клавиша Enter не вызывает события DATA_CHANGED и DATA_CHANGED_FINISHED.

. Если вы хотите эту функцию, вы должны вызвать метод REGISTER_EDIT_EVENT и передать один из этих двухконстанты для синхронного запуска двух событий:

  • MC_EVT_ENTER: события будут всегда запускаться при нажатии Enter, даже если ни одна ячейка не была изменена
  • MC_EVT_MODIFIED: события будут запускаться , как только будет изменена одна ячейка и нажата либо Enter, либо фокус изменен на другую ячейку.
...