ALV复选框只能勾选单值

TYPE-POOLS SLIS.

DATA: BEGIN OF GT_LIST OCCURS 0,
        SEL   TYPE CHAR4,
        VAL   TYPE I,
        STYLE TYPE LVC_T_STYL,
      END OF GT_LIST.
DATA: GS_STYL         TYPE LVC_S_STYL,
      GS_SCOL         TYPE LVC_S_SCOL.

DEFINE MCR_FILL_STYL.
  GS_STYL-FIELDNAME = &1.
  GS_STYL-STYLE     = &2.
  INSERT GS_STYL INTO TABLE GT_LIST-STYLE.
  CLEAR GS_STYL.
END-OF-DEFINITION.

DATA: GO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.

*&---------------------------------------------------------------------*
*&      START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM FRM_GET_DATA.
  PERFORM FRM_DSP_DATA.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
  DATA: LV_INDEX TYPE I.
  DO 3 TIMES.
    LV_INDEX = SY-INDEX.
    DO SY-INDEX * 2 TIMES.
      IF SY-INDEX NE 1.
        MCR_FILL_STYL:  'SEL'   CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
      ELSE.
        MCR_FILL_STYL:  'SEL'   CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
      ENDIF.
      GT_LIST-VAL = LV_INDEX.
      APPEND GT_LIST.
      CLEAR GT_LIST.
    ENDDO.
  ENDDO.
ENDFORM.                    " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_DSP_DATA
*&---------------------------------------------------------------------*
FORM FRM_DSP_DATA .
  DATA: LS_LAYO  TYPE LVC_S_LAYO,
        LT_FCAT  TYPE LVC_T_FCAT,
        LS_FCAT  TYPE LVC_S_FCAT,
        LT_EVENT TYPE SLIS_T_EVENT,
        LS_EVENT TYPE SLIS_ALV_EVENT.
  LS_LAYO-ZEBRA      = ABAP_TRUE.
  LS_LAYO-CWIDTH_OPT = ABAP_TRUE.
  LS_LAYO-STYLEFNAME = 'STYLE'.
  LS_FCAT-FIELDNAME = 'SEL'.
  LS_FCAT-CHECKBOX = 'X'.
  LS_FCAT-EDIT = 'X'.
  LS_FCAT-SCRTEXT_L =
  LS_FCAT-SCRTEXT_M =
  LS_FCAT-SCRTEXT_S = '选择'.
  APPEND LS_FCAT TO LT_FCAT.
  CLEAR LS_FCAT.
  LS_FCAT-FIELDNAME = 'VAL'.
  LS_FCAT-SCRTEXT_L =
  LS_FCAT-SCRTEXT_M =
  LS_FCAT-SCRTEXT_S = '值'.
  APPEND LS_FCAT TO LT_FCAT.
  CLEAR LS_FCAT.
  LS_EVENT-NAME = SLIS_EV_CALLER_EXIT_AT_START.
  LS_EVENT-FORM = SLIS_EV_CALLER_EXIT_AT_START.
  APPEND LS_EVENT TO LT_EVENT.
  LS_EVENT-NAME = SLIS_EV_DATA_CHANGED.
  LS_EVENT-FORM = SLIS_EV_DATA_CHANGED.
  APPEND LS_EVENT TO LT_EVENT.
* 显示alv列表
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM = SY-REPID
      IS_LAYOUT_LVC      = LS_LAYO
      IT_FIELDCAT_LVC    = LT_FCAT
      I_SAVE             = 'A'
      IT_EVENTS          = LT_EVENT
    TABLES
      T_OUTTAB           = GT_LIST
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " FRM_DSP_DATA
*&---------------------------------------------------------------------*
*&      Form  CALLER_EXIT
*&---------------------------------------------------------------------*
FORM CALLER_EXIT USING U_EXIT TYPE SLIS_DATA_CALLER_EXIT.
  DATA: LS_F4 TYPE LVC_S_F4,
        LT_F4 TYPE LVC_T_F4.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = GO_ALV_GRID.
* 设置回车事件
  CALL METHOD GO_ALV_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.
* 设置光标焦点移开被修改单元格后触发事件
  CALL METHOD GO_ALV_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.
ENDFORM.                    "CALLER_EXIT
*&---------------------------------------------------------------------*
*&      Form  DATA_CHANGED
*&---------------------------------------------------------------------*
*       数据改变检查
*----------------------------------------------------------------------*
FORM DATA_CHANGED USING OR_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
  DATA: LS_MOD_CELLS  TYPE LVC_S_MODI.
  FIELD-SYMBOLS: <FS_LINE>  LIKE GT_LIST,
                 <FS_VALUE> TYPE ANY.
  LOOP AT OR_DATA_CHANGED->MT_GOOD_CELLS INTO LS_MOD_CELLS.
    CLEAR GT_LIST.
    READ TABLE GT_LIST ASSIGNING <FS_LINE> INDEX LS_MOD_CELLS-ROW_ID.
    IF SY-SUBRC EQ 0.
      ASSIGN COMPONENT LS_MOD_CELLS-FIELDNAME OF STRUCTURE <FS_LINE> TO <FS_VALUE>.
      IF SY-SUBRC EQ 0.
        CALL METHOD OR_DATA_CHANGED->GET_CELL_VALUE
          EXPORTING
            I_ROW_ID    = LS_MOD_CELLS-ROW_ID
            I_FIELDNAME = LS_MOD_CELLS-FIELDNAME
          IMPORTING
            E_VALUE     = <FS_VALUE>.
      ENDIF.
    ENDIF.
    CASE LS_MOD_CELLS-FIELDNAME.
      WHEN 'SEL'.
        GT_LIST-SEL = ''.
        MODIFY GT_LIST TRANSPORTING SEL WHERE SEL IS NOT INITIAL.
        LOOP AT GT_LIST
          WHERE VAL EQ <FS_LINE>-VAL .
          GT_LIST-SEL = 'X'.
          MODIFY GT_LIST TRANSPORTING SEL.
        ENDLOOP.
      WHEN OTHERS.
    ENDCASE.
  ENDLOOP.
  PERFORM FRM_REF_ALV.
ENDFORM.                    " DATA_CHANGED
*&---------------------------------------------------------------------*
*&      Form  FRM_REF_ALV
*&---------------------------------------------------------------------*
FORM FRM_REF_ALV .
  DATA LS_STBL TYPE LVC_S_STBL.
  LS_STBL-ROW = ABAP_TRUE.
  LS_STBL-COL = ABAP_TRUE.
  CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE = LS_STBL.
ENDFORM.                    " FRM_REF_ALV

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值