ALV根据显示列动态修改行汇总列数据

REPORT  zjianzh.
TYPE-POOLSslis.
DATA:
    layout TYPE  slis_layout_alv,
     wa_fieldcat TYPE slis_fieldcat_alv,
     git_events TYPE slis_t_event,   "ALV 事件
     it_fieldcat TYPE slis_t_fieldcat_alv,
     stbl TYPE lvc_s_stbl,
     ls_variant TYPE disvariant.

DATA:BEGIN OF wa,
     col1 TYPE i,
     col2 TYPE i,
     col3 TYPE i,
     col4 TYPE i,
     col5 TYPE i,
     col6 TYPE i,
END OF wa .
DATA:itab LIKE wa OCCURS 0.
FIELD-SYMBOLS<dynwa> TYPE ANY,            "Dynamic work area
              <field> TYPE ANY.           "

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA tem_grid TYPE REF TO cl_gui_alv_grid.
*----------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:

    handle_after_user_command
FOR EVENT after_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
  PRIVATE SECTION.
ENDCLASS.                    "
*----------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD  handle_after_user_command.
    DATA ls_fcat TYPE lvc_s_fcat .
    DATA lt_fcat TYPE lvc_t_fcat .
    CALL METHOD tem_grid->get_frontend_fieldcatalog
      IMPORTING
        et_fieldcatalog lt_fcat[].

    DATA:tmp TYPE i.
    LOOP AT itab ASSIGNING <dynwa>.
      CLEAR tmp.
      LOOP AT lt_fcat INTO ls_fcat WHERE fieldname NE 'COL6' AND no_out NE 'X'.
        ASSIGN COMPONENT ls_fcat-fieldname OF STRUCTURE <dynwa> TO <field>.
        tmp tmp + <field>.
      ENDLOOP.
      ASSIGN COMPONENT 'COL6' OF STRUCTURE <dynwa> TO <field>.
      <field> tmp.
      MODIFY itab FROM <dynwa>.
    ENDLOOP.

    stbl-row 'X'." 基于行的稳定刷新
    stbl-col 'X'." 基于列稳定刷新
    CALL METHOD tem_grid->refresh_table_display
      EXPORTING
        is_stable stbl.
  ENDMETHOD.                    "handle_before_user_command
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

START-OF-SELECTION.
  wa-col1 '1'.
  wa-col2 '2'.
  wa-col3 '3'.
  wa-col4 '4'.
  wa-col5 '5'.
  wa-col6 '15'.
  APPEND wa TO itab.

  wa-col1 '10'.
  wa-col2 '20'.
  wa-col3 '30'.
  wa-col4 '40'.
  wa-col5 '51'.
  wa-col6 '151'.
  APPEND wa TO itab.

END-OF-SELECTION.
  PERFORM write_data.
*&---------------------------------------------------------------------*
*&      Form  FIELDCAT_INT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0069   text
*      -->P_0070   text
*      -->P_0071   text
*      -->P_0072   text
*      -->P_0073   text
*      -->P_0074   text
*----------------------------------------------------------------------*
FORM fieldcat_int  USING  field1    "字段名
                            field2    "列抬头文本
                            field3                          "不显示0
                            field4
                            field5  "可编辑
                            field6.  "复选框
  CLEAR wa_fieldcat.
  wa_fieldcat-fieldname field1.
  wa_fieldcat-seltext_l field2.
  wa_fieldcat-no_zero field3.
  wa_fieldcat-edit field5.
  wa_fieldcat-checkbox field6.

  APPEND wa_fieldcat TO it_fieldcat.

ENDFORM.                    " FIELDCAT_INT
*&---------------------------------------------------------------------*
*&      Form  write_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_data .
  layout-zebra 'X'.
  layout-colwidth_optimize 'X'.
*******设置ALV显示列
  CLEAR:wa_fieldcat,it_fieldcat[].

  PERFORM fieldcat_int USING 'COL1' '列1'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL2' '列2'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL3' '列3'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL4' '列4'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL5' '列5'   ''   ''  ''  ''.
  PERFORM fieldcat_int USING 'COL6' '汇总'   ''   ''  ''  ''.


  DATA l_events TYPE LINE OF slis_t_event.
  CLEAR l_events.
  l_events-name 'CALLER_EXIT'.
  l_events-form 'FM_BUTTON'.
  APPEND l_events TO git_events.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
       i_callback_program sy-repid
       it_fieldcat        it_fieldcat
       is_layout          layout
       i_save             'A'
      it_events                git_events
     TABLES
       t_outtab           itab
     EXCEPTIONS
       program_error      1
       OTHERS             2.
  IF sy-subrc <> 0.
  ENDIF.

ENDFORM.                    " write_data
*&---------------------------------------------------------------------*
*&      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'
    IMPORTING
      e_grid tem_grid.

  CREATE OBJECT gt_event_receiver.
  SET HANDLER gt_event_receiver->handle_after_user_command FOR tem_grid.
ENDFORM.                    "FM_BUTTON
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值