ALV 单元格编辑回车响应

report ztest.

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..

DATA: BEGIN 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.

  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

posted @ 2013-10-07 09:16  Eric.su  阅读(1360)  评论(0编辑  收藏  举报