双击后实现单元格可编辑

*&---------------------------------------------------------------------*
*& Report ZF_TEST_6
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZF_TEST_6.
**********************************************************************
*REPORT DESCRIBE:双击后实现单元格可编辑
*DEVELOPER:SALAH
*DEVELOP DATE:20191024
*MODIFY DATE:
*FUNCTION SPEC:
*KEY USER:
**********************************************************************
TYPE-POOLS SLIS.
TYPES:BEGIN OF TYP_01,
        PER_KEY(20TYPE C,
        PER_NOR(20TYPE C,
        SEL_STY     TYPE LVC_T_STYL,
        CBOX        TYPE C,
      END OF TYP_01.
DATA IS_SEL_STY TYPE LVC_S_STYL.
DATA IS_LAYOUT TYPE LVC_S_LAYO.
DATA IS_GRID_SET TYPE LVC_S_GLAY.
DATA GT_01 TYPE STANDARD TABLE OF TYP_01 .
DATA GS_01 TYPE TYP_01.
DATA IR_01 TYPE REF TO CL_GUI_ALV_GRID."ALV显示类
DATA LR_01 TYPE REF TO CL_GUI_ALV_GRID.
DATA IR_02 TYPE REF TO CL_GUI_CUSTOM_CONTAINER."容器类
DATA IT_FIELDCAT TYPE LVC_T_FCAT .
DATA IS_FIELDCAT TYPE LVC_S_FCAT.
DATA OK_CODE TYPE SYUCOMM.
DATA I_K TYPE C.
CLASS DOUBLE_CLICK DEFINITION.
  PUBLIC SECTION.
    METHODS DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN ES_ROW_NO.
ENDCLASS.

CLASS DOUBLE_CLICK IMPLEMENTATION.
  METHOD DOUBLE_CLICK.
    PERFORM FRM_DOUBLE USING E_ROW E_COLUMN ES_ROW_NO.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  CALL SCREEN 1010.



*&---------------------------------------------------------------------*
*&      Module  STATUS_1010  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_1010 OUTPUT.
  SET PF-STATUS 'MENU'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
  LEAVE PROGRAM.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  DISPLAY  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE DISPLAY OUTPUT.
  DATA P_EVENTS TYPE REF TO DOUBLE_CLICK."类的名字
  CREATE OBJECT P_EVENTS.

  GS_01-PER_KEY 'test key one'.
  GS_01-PER_NOR 'test normal one'.
  APPEND GS_01 TO GT_01.


  GS_01-PER_KEY 'test key two'.
  GS_01-PER_NOR 'test normal two'.
  APPEND GS_01 TO GT_01.


  IS_FIELDCAT-FIELDNAME 'per_key'.
  "is_fieldcat-edit = 'X'.
  IS_FIELDCAT-SCRTEXT_L '键值数据'.
  APPEND IS_FIELDCAT TO IT_FIELDCAT.

  IS_FIELDCAT-FIELDNAME 'per_nor'.
  "is_fieldcat-edit = 'X'.
  IS_FIELDCAT-SCRTEXT_L '非键值数据'.
  IS_GRID_SET-EDT_CLL_CB 'X'.

  IS_GRID_SET-EDT_CLL_CB 'X'.
  IS_LAYOUT-CWIDTH_OPT 'X'.
  IS_LAYOUT-EDIT 'X'.
  IS_LAYOUT-NO_TOOLBAR 'X'.
  IS_LAYOUT-STYLEFNAME 'SEL_STY'.
  IS_LAYOUT-BOX_FNAME 'CBOX'.
  APPEND IS_FIELDCAT TO IT_FIELDCAT.
  LOOP AT GT_01 INTO GS_01.
    IS_SEL_STY-FIELDNAME 'per_key'.
    IS_SEL_STY-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
    INSERT IS_SEL_STY INTO TABLE GS_01-SEL_STY.
    IS_SEL_STY-FIELDNAME 'per_nor'.
    IS_SEL_STY-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
    INSERT IS_SEL_STY INTO TABLE GS_01-SEL_STY.
    MODIFY GT_01 FROM GS_01 INDEX SY-TABIX.
    CLEAR IS_SEL_STY.
  ENDLOOP.
  IF IR_02 IS NOT BOUND.
    CREATE OBJECT IR_02
      EXPORTING
*       PARENT         =
        CONTAINER_NAME 'SJBJ'
*       STYLE          =
*       LIFETIME       = lifetime_default
        REPID          = SY-REPID
        DYNNR          = SY-DYNNR
*       NO_AUTODEF_PROGID_DYNNR     =
*    EXCEPTIONS
*       CNTL_ERROR     = 1
*       CNTL_SYSTEM_ERROR           = 2
*       CREATE_ERROR   = 3
*       LIFETIME_ERROR = 4
*       LIFETIME_DYNPRO_DYNPRO_LINK = 5
*       OTHERS         = 6
      .
    IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.

  IF IR_01 IS NOT BOUND.
    CREATE OBJECT IR_01
      EXPORTING
*       I_SHELLSTYLE      = 0
*       I_LIFETIME        =
        I_PARENT = IR_02
*       I_APPL_EVENTS     = space
*       I_PARENTDBG       =
*       I_APPLOGPARENT    =
*       I_GRAPHICSPARENT  =
*       I_NAME   =
*       I_FCAT_COMPLETE   = SPACE
*                       EXCEPTIONS
*       ERROR_CNTL_CREATE = 1
*       ERROR_CNTL_INIT   = 2
*       ERROR_CNTL_LINK   = 3
*       ERROR_DP_CREATE   = 4
*       OTHERS   = 5
      .
    IF SY-SUBRC <> 0.
*                      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*                                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.


  ENDIF.
  SET HANDLER P_EVENTS->DOUBLE_CLICK FOR IR_01."注册事件
*  CALL METHOD P_EVENTS->DOUBLE_CLICK.
  IF I_K IS INITIAL .
    I_K 'X'.
    CALL METHOD IR_01->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
*       I_BUFFER_ACTIVE =
*       I_BYPASSING_BUFFER            =
*       I_CONSISTENCY_CHECK           =
*       I_STRUCTURE_NAME              =
*       IS_VARIANT      =
*       I_SAVE          =
*       I_DEFAULT       = 'X'
        IS_LAYOUT       = IS_LAYOUT
*       IS_PRINT        =
*       IT_SPECIAL_GROUPS             =
*       IT_TOOLBAR_EXCLUDING          =
*       IT_HYPERLINK    =
*       IT_ALV_GRAPHICS =
*       IT_EXCEPT_QINFO =
*       IR_SALV_ADAPTER =
      CHANGING
        IT_OUTTAB       = GT_01
        IT_FIELDCATALOG = IT_FIELDCAT
*       IT_SORT         =
*       IT_FILTER       =
*      EXCEPTIONS
*       INVALID_PARAMETER_COMBINATION = 1
*       PROGRAM_ERROR   = 2
*       TOO_MANY_LINES  = 3
*       OTHERS          = 4
      .
    IF SY-SUBRC <> 0.
*     Implement suitable error handling here
    ENDIF.
  ELSE.
    CALL METHOD IR_01->REFRESH_TABLE_DISPLAY
*  EXPORTING
*    IS_STABLE      =
*    I_SOFT_REFRESH =
*  EXCEPTIONS
*    FINISHED       = 1
*    OTHERS         = 2
      .
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.
  ENDIF.

ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1010  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM FRM_DOUBLE  USING    P_E_ROW     TYPE LVC_S_ROW
                          P_E_COLUMN  TYPE LVC_S_COL
                          P_ES_ROW_NO TYPE LVC_S_ROID.
  DATA:  MYINDEX TYPE SY-TABIX.
  READ TABLE GT_01 INTO GS_01 INDEX P_E_ROW.
  MYINDEX = SY-TABIX.
  LOOP AT GT_01 INTO GS_01 .
    IF SY-TABIX = MYINDEX.
      CLEAR GS_01-SEL_STY.
      LOOP AT IT_FIELDCAT INTO IS_FIELDCAT .
        IF IS_FIELDCAT-FIELDNAME = P_E_COLUMN-FIELDNAME.
          IS_SEL_STY-FIELDNAME = P_E_COLUMN-FIELDNAME.
          IS_SEL_STY-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
          INSERT IS_SEL_STY INTO  TABLE GS_01-SEL_STY.
        ELSE.
          IS_SEL_STY-FIELDNAME = IS_FIELDCAT-FIELDNAME.
          IS_SEL_STY-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
          INSERT IS_SEL_STY INTO  TABLE GS_01-SEL_STY.
        ENDIF.
        MODIFY GT_01 FROM GS_01.
      ENDLOOP.
    ENDIF.
  ENDLOOP.

  CALL METHOD IR_01->SET_FRONTEND_LAYOUT
    EXPORTING
      IS_LAYOUT = IS_LAYOUT.

  DATA:LS_STABLE TYPE LVC_S_STBL.
  LS_STABLE-ROW 'X'.
  LS_STABLE-COL 'X'.

  CALL METHOD IR_01->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE      = LS_STABLE
      I_SOFT_REFRESH 'X'
    EXCEPTIONS
      FINISHED       1
      OTHERS         2.


ENDFORM.

猜你喜欢

转载自www.cnblogs.com/salah/p/11935447.html