• 转载非原创:修改BB 的内容,回车后修改CC 的值


    原文 http://blog.csdn.net/iamah/article/details/8438981

     

     

     

    修改BB 的内容,回车后修改CC 的值

    步骤:

    1. 注册类为对类CL_GUI_ALV_GRID的事件DATA_CHANGED_FINISHED定义一个方法,创建对象gt_evnet_receiver

    2. 调用FM 'REUSE_ALV_GRID_DISPLAY_LVC'时要调用事件 slis_ev_caller_exit_at_start来获取ALV对象并给其注册回车事件及处理方法.

     

     

    *&---------------------------------------------------------------------*

     

    DATA gt_event TYPE slis_t_event WITH HEADER LINE.

    DATA:  ref_grid TYPE REF TO cl_gui_alv_grid.

     

     

    "声明类及定义方法来处理data_changed_finished事件

     

    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.                    "LCL_EVENT_RECEIVER DEFINITION

    *----------------------------------------------------------------------*

    *       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION

    *----------------------------------------------------------------------*

    *

    *----------------------------------------------------------------------*

    CLASS lcl_event_receiver IMPLEMENTATION.

      METHOD handle_modify.

    *    PERFORM refresh.

     

        DATA stbl TYPE lvc_s_stbl.

     

        LOOP AT gt_itab INTO wa_itab.

          wa_itab-cc = wa_itab-bb * .

          MODIFY gt_itab FROM wa_itab.

        ENDLOOP.

    *   稳定刷新

        stbl-row 'X'.基于行的稳定刷新

        stbl-col 'X'.基于列稳定刷新

        CALL METHOD ref_grid->refresh_table_display

          EXPORTING

            is_stable = stbl.

      ENDMETHOD.                    "HANDLE_MODIFY

    ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

     

    DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

    *&---------------------------------------------------------------------*

     

     

      gt_event-name 'CALLER_EXIT'.   "slis_ev_caller_exit_at_start事件调用来获取ALV对象并注册回车事件

      gt_event-FORM 'FM_BUTTON'.

      APPEND gt_event .

     

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'

      EXPORTING

        i_callback_program                  = sy-repid

    *    i_callback_user_command            = 'USER_COMMAND'

    *    i_grid_settings                    = gs_grid

        is_layout_lvc                       = gs_layo

        it_fieldcat_lvc                     = pt_fcat[]

         it_events                          = gt_event[]

    *     it_event_exit                     = gt_event_exit[]

      TABLES

        t_outtab                            = pt_tab

    *   EXCEPTIONS

    *     PROGRAM_ERROR                     = 1

    *     OTHERS                            = 2

        .

     

    *&---------------------------------------------------------------------*

     

    FORM fm_button USING e_grid TYPE slis_data_caller_exit.

     

      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    *   EXPORTING

    *     IR_SALV_FULLSCREEN_ADAPTER       =

      IMPORTING

    *     ET_EXCLUDING                     =

    *     E_REPID                          =

    *     E_CALLBACK_PROGRAM               =

    *     E_CALLBACK_ROUTINE               =

        e_grid                           = ref_grid

    *     ET_FIELDCAT_LVC                  =

    *     ER_TRACE                         =

    *     E_FLG_NO_HTML                    =

    *     ES_LAYOUT_KKBLO                  =

    *     ES_SEL_HIDE                      =

    *     ET_EVENT_EXIT                    =

    *     ER_FORM_TOL                      =

    *     ER_FORM_EOL                      =

        .

     

    *   CALL METHOD ref_grid->check_changed_data.

    设置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.                    "FM_BUTTON

        .

     

    *&---------------------------------------------------------------------*

     

     

     

    ***************************************************************************************************************

    ***************************************************************************************************************

    ***************************************************************************************************************

    完整代码,可执行

    ***************************************************************************************************************

    ***************************************************************************************************************

    ***************************************************************************************************************

    *&---------------------------------------------------------------------*

    *& Report  ZFELIX_ALV

    *&

    *&---------------------------------------------------------------------*

    *&

    *&

    *&---------------------------------------------------------------------*

     

    REPORT  zfelix_alv.

    TYPE-POOLS: slis.

     

    DATA: gs_fcat TYPE lvc_s_fcat,

          gt_fcat TYPE lvc_t_fcat,

          gs_layo TYPE lvc_s_layo,

          gs_grid TYPE lvc_s_glay.

    DATA: gt_event TYPE slis_t_event WITH HEADER LINE,

          gt_event_exit TYPE slis_t_event_exit WITH HEADER LINE.

     

    DATA:  ref_grid TYPE REF TO cl_gui_alv_grid..

     

    DATABEGIN OF gt_itab OCCURS 0,

            aa TYPE c,

            bb TYPE i,

            cc TYPE p,

         style TYPE lvc_t_styl,

        END OF gt_itab.

    DATA: wa_itab LIKE gt_itab.

     

     

     

    *----------------------------------------------------------------------*

    *       CLASS lcl_event_receiver DEFINITION

    *----------------------------------------------------------------------*

    *

    *----------------------------------------------------------------------*

    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.                    "LCL_EVENT_RECEIVER DEFINITION

    *----------------------------------------------------------------------*

    *       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION

    *----------------------------------------------------------------------*

    *

    *----------------------------------------------------------------------*

    CLASS lcl_event_receiver IMPLEMENTATION.

      METHOD handle_modify.

    *    PERFORM refresh.

     

        DATA stbl TYPE lvc_s_stbl.

     

        LOOP AT gt_itab INTO wa_itab.

          wa_itab-cc = wa_itab-bb * .

          MODIFY gt_itab FROM wa_itab.

        ENDLOOP.

    *   稳定刷新

        stbl-row 'X'.基于行的稳定刷新

        stbl-col 'X'.基于列稳定刷新

        CALL METHOD ref_grid->refresh_table_display

          EXPORTING

            is_stable = stbl.

      ENDMETHOD.                    "HANDLE_MODIFY

    ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

    DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

     

    START-OF-SELECTION.

      gt_itab-aa 'aa'.

      gt_itab-bb 1.

      gt_itab-cc '1.2'.

      APPEND gt_itab.

     

     

      gt_itab-aa 'aa'.

      gt_itab-bb 1.

      gt_itab-cc '1.2'.

      APPEND gt_itab.

     

      gt_itab-aa 'aa'.

      gt_itab-bb 1.

      gt_itab-cc '1.2'.

      APPEND gt_itab.

     

      PERFORM display_data .

     

     

    *&---------------------------------------------------------------------*

    *&      Form  display_data

    *&---------------------------------------------------------------------*

    *       text

    *----------------------------------------------------------------------*

    FORM display_data .

      PERFORM set_fcat.

      PERFORM set_layout.

    *  gt_event-form = 'DATA_CHANGED'.

    *  gt_event-name = slis_ev_data_changed.

    *  APPEND gt_event.

     

     

    *  gt_event_exit-ucomm  =  'ENTR'. "Enter = 'ENTR' & '/00' & ' '

    *  APPEND gt_event_exit.

     

    *  gt_event_exit-ucomm  =  '/00'.

    *  APPEND gt_event_exit.

    *

    *  gt_event_exit-ucomm  =  ' '.

    *  APPEND gt_event_exit.

    *

    *  gt_event_exit-ucomm  =  '&DATA_SAVE'.

    *  APPEND gt_event_exit.

     

    *

    *  gt_event_exit-ucomm  = '&F03'.   "Back

    *  APPEND gt_event_exit.

    *  gt_event_exit-ucomm  = '&F15'.

    *  APPEND gt_event_exit.

    *  gt_event_exit-ucomm  = '&F12'.

    *  APPEND gt_event_exit  .

     

     

      PERFORM show_alv  TABLES gt_fcat  gt_itab[]

                         USING  gs_layo.

    ENDFORM.                    " DISPLAY_DATA

     

    *&---------------------------------------------------------------------*

    FORM set_fcat .

      PERFORM csalv_set_fcat USING:

     

            " 'Field' 'Text' 'Edit' 'Zero' 'Type' 'Qfieldname' 'Key' 'Hostspot' 'Emphasize' 'Checkbox'

            'AA'  'AA'  ''  ''  ''  ''  ''  ''  ''  '',

            'BB'  'BB'  'X'  ''  ''  ''  ''  ''  ''  '',

            'CC'  'CC'  ''  ''  ''  ''  ''  ''  ''  ''.

    *        'DD'  'DD'  'X'  ''  ''  ''  ''  'X'  ''  'X',

    *        'EE'  'EE'  ''  ''  ''  ''  ''  ''  ''  'X'  .

     

    ENDFORM.                    " SET_FCAT

    *&---------------------------------------------------------------------*

    FORM set_layout .

      gs_layo-zebra             'X'.

    *  gs_layout-stylefname     = 'FIELD_STYLE'.

    *  gs_layo-CWIDTH_OPT        =  'X'.

    ENDFORM.                    " SET_LAYOUT

    *&---------------------------------------------------------------------*

    FORM csalv_set_fcat USING p_name

          p_text

          p_edit

          p_zero

          p_type

          p_qfieldname

          p_key

          p_hotspot

          p_emphasize

          p_checkbox.

     

      gs_fcat-fieldname   =  p_name.

    *  gs_fcat-reptext_l   =

    *  gs_fcat-selddictxt   =

      gs_fcat-reptext     =  p_text.

      gs_fcat-edit        =  p_edit.

      gs_fcat-no_zero     =  p_zero.

      gs_fcat-datatype    =  p_type.

      gs_fcat-qfieldname  =  p_qfieldname.

      gs_fcat-key         =  p_key.

      gs_fcat-hotspot     =  p_hotspot.

      gs_fcat-emphasize   =  p_emphasize.

      gs_fcat-checkbox    =   p_checkbox.

     

      APPEND gs_fcat TO  gt_fcat.

    ENDFORM.                    "csalv_set_fcat

     

    *&---------------------------------------------------------------------*

     

    FORM show_alv TABLES  pt_fcat

                          pt_tab

                  USING   ps_layout.

     

     

    *  gs_grid-edt_cll_cb = 'X'.

     

      gt_event-name 'CALLER_EXIT'.   "slis_ev_caller_exit_at_start事件

      gt_event-FORM 'FM_BUTTON'.

      APPEND gt_event .

     

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'

      EXPORTING

        i_callback_program                  = sy-repid

    *    i_callback_user_command            = 'USER_COMMAND'

    *    i_grid_settings                    = gs_grid

        is_layout_lvc                       = gs_layo

        it_fieldcat_lvc                     = pt_fcat[]

         it_events                          = gt_event[]

    *     it_event_exit                     = gt_event_exit[]

      TABLES

        t_outtab                            = pt_tab

    *   EXCEPTIONS

    *     PROGRAM_ERROR                     = 1

    *     OTHERS                            = 2

        .

    ENDFORM.                    "csalv_set_fcat

    *&---------------------------------------------------------------------*

    *&      Form  user_command

    *&---------------------------------------------------------------------*

    *       text

    *----------------------------------------------------------------------*

    *      -->P_UCOMM      text

    *      -->PS_SELFIELD  text

    *----------------------------------------------------------------------*

    FORM user_command USING r_ucomm LIKE sy-ucomm

          rs_selfield TYPE slis_selfield.

     

      CASE r_ucomm.

        WHEN '&DATA_SAVE'.

     

        WHEN ' ' .

        WHEN OTHERS.

      ENDCASE.

     

    ENDFORM.                    "user_command

    *&---------------------------------------------------------------------*

    *&      Form  SET_PF_STATUS

    *&---------------------------------------------------------------------*

    *       text

    *----------------------------------------------------------------------*

    *      -->RT_EXTAB   text

    *----------------------------------------------------------------------*

    FORM set_pf_status USING rt_extab TYPE slis_t_extab..

    *  SET PF-STATUS '100'.

    ENDFORM.                    "SET_PF_STATUS

    *&---------------------------------------------------------------------*

    *&      Form  fm_button

    *&---------------------------------------------------------------------*

    *       text

    *----------------------------------------------------------------------*

    *      -->E_GRID     text

    *----------------------------------------------------------------------*

    FORM fm_button USING e_grid TYPE slis_data_caller_exit.

     

      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    *   EXPORTING

    *     IR_SALV_FULLSCREEN_ADAPTER       =

      IMPORTING

    *     ET_EXCLUDING                     =

    *     E_REPID                          =

    *     E_CALLBACK_PROGRAM               =

    *     E_CALLBACK_ROUTINE               =

        e_grid                           = ref_grid

    *     ET_FIELDCAT_LVC                  =

    *     ER_TRACE                         =

    *     E_FLG_NO_HTML                    =

    *     ES_LAYOUT_KKBLO                  =

    *     ES_SEL_HIDE                      =

    *     ET_EVENT_EXIT                    =

    *     ER_FORM_TOL                      =

    *     ER_FORM_EOL                      =

        .

     

    *   CALL METHOD ref_grid->check_changed_data.

    设置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.                    "FM_BUTTON

     

     

  • 相关阅读:
    CodeForces
    CodeForces-1253B(贪心+模拟)
    WebFlux、Reactive编程特性
    redis-on-windows配置解释
    SpringBoot配置方式补充
    如何在 Ubuntu 20.04 上安装 Python Pip
    MySQL之1055错误
    CuckooSandbox
    Manjaro 20.0.1 Lysia 安装Googlepinyin
    Manjaro 20.0.1 Lysia 更新国内镜像源
  • 原文地址:https://www.cnblogs.com/springzt/p/4371700.html
Copyright © 2020-2023  润新知