ALV 可编辑部分逻辑

定义

DATA:gt_event TYPE slis_t_event WITH HEADER LINE.
DATA:ref_grid TYPE REF TO cl_gui_alv_grid.

INCLUDE zrpp_001_clc.
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

加载include

*&---------------------------------------------------------------------*
*&  包含                ZRPP_001_CLC
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&       Class lcl_event_receiver
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
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.
*&---------------------------------------------------------------------*
*&       Class (Implementation)  lcl_event_receiver
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_modify.
*    PERFORM refresh.
    DATA stbl TYPE lvc_s_stbl.
    break sapfy.
    LOOP AT gt_out INTO gw_out.
      READ TABLE gt_out_temp_001 INTO gw_out_temp_001 WITH KEY zno = gw_out-zno.
      IF sy-subrc EQ 0 AND gw_out-apply > gw_out_temp_001-apply.
        DATA:l_string TYPE string.
        CLEAR:l_string.
        CONCATENATE '行项目' gw_out-zno '应发数量不能超过需求数量-已领数量' INTO l_string.
        MESSAGE l_string TYPE 'E'.
      ELSE.
        MODIFY gt_out FROM gw_out TRANSPORTING apply zremark.
      ENDIF.
    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

ALV新增事件

 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       = g_repid
      i_bypassing_buffer       = 'X'
      i_save                   = 'A'
      is_layout_lvc            = l_layout
      i_callback_pf_status_set = 'SET_PF'
      i_callback_user_command  = 'USER_COM'
      it_fieldcat_lvc          = lt_fieldcat[]
      i_default                = 'X'
      it_events                = gt_event[]
    TABLES
      t_outtab                 = gt_out[]
    EXCEPTIONS
      program_error            = 1.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

最后新增button事件

*&---------------------------------------------------------------------*
*&      Form  fm_button
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值