ALV回车事件

作者: Mmm_余安 | 来源:发表于2017-11-16 14:12 被阅读49次

ALV不能直接在GUI 状态里响应回车事件,需要自己定义,写代码。

REUSE_ALV_GRID_DISPLAY_LVC.png

data定义:

DATA:GT_EVENT TYPE SLIS_T_EVENT WITH HEADER LINE.
DATA STBL TYPE LVC_S_STBL.
DATA: REF_GRID TYPE REF TO CL_GUI_ALV_GRID.

选择屏幕前写:

CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS HANDLE_MODIFY
                  FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
      IMPORTING E_MODIFIED ET_GOOD_CELLS.
ENDCLASS.
DATA GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER .

定义一个方法

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
  METHOD HANDLE_MODIFY.

    LOOP AT   IT_TAB INTO WA_TAB .
     *要处理的逻辑*
      MODIFY IT_TAB FROM WA_TAB.

    ENDLOOP.

    IF E_MODIFIED = 'X'.
      STBL-ROW = 'X'." 基于行的稳定刷新
      STBL-COL = 'X'." 基于列稳定刷新
      CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
        EXPORTING
          IS_STABLE = STBL.
    ENDIF.
  ENDMETHOD.
ENDCLASS.

在调ALV展示之前写一个单独的perform,类似layout 的 perform中写:

  DATA: I_GRID_SETTINGS TYPE LVC_S_GLAY.
  GT_EVENT-NAME = 'CALLER_EXIT'.
  GT_EVENT-FORM = 'FM_BUTTON'.
  APPEND GT_EVENT.
*&---------------------------------------------------------------------*
*&    FRM_BUTTON
*&---------------------------------------------------------------------*
*      ALV输出
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = REF_GRID.
* 设置enter事件
  CALL METHOD REF_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.


  CREATE OBJECT GT_EVENT_RECEIVER.
  SET HANDLER   GT_EVENT_RECEIVER->HANDLE_MODIFY FOR REF_GRID.


ENDFORM.

相关文章

网友评论

  • Vincent_7:响应回车事件,什么意思,在alv中回车,一般什么时候用到
    Mmm_余安:@Manking 写EVENT事件了吗
    Vincent_7:最近有个开发是这样的。但是发现,当用户可以输入的时候,用户忘记回车了。直接点击运行或者过账后,值没有刷新,还是旧值。这个可以在程序中设置吗
    Mmm_余安:@Manking ALV展示之后一般实现某个功能都是通过GUI 状态的按钮,但有时候客户会要求不想用按钮,觉得更敲回车方便。这是一个个性化需求。举个例子:当ALV中有一个字段A是前几个字段求和,但有一个字段B是可输入的,所以B的值会影响A的值,当B改变就要重新进行计算。就需要写回车(按钮)事件处理!

本文标题:ALV回车事件

本文链接:https://www.haomeiwen.com/subject/gpclvxtx.html