1.效果图:
2.源代码:
**&--------------------------「程序说明-START」------------------------*
*
**& ReportName: ZDEMO_SALV
*
**& Packet: ZPZYH
*
**& Author: ZhangYunhu
*
**& CreatedDate: 14.06.2022 13:55:08
*
**& Intention :
*
** Detail:
*
*
**&--------------------------「程序说明-END」--------------------------*
REPORT ZDEMO_SALV.
***********************************************************************
**---------------------------T A B L E S------------------------------*
***********************************************************************
DATA:GT_DATA TYPE TABLE OF SPFLI.
***********************************************************************
**------------------------V A R I A B L E S---------------------------*
***********************************************************************
DATA:GR_SALV_TABLE TYPE REF TO CL_SALV_TABLE.
DATA:GR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST.
DATA:GR_SELECTIONS TYPE REF TO CL_SALV_SELECTIONS.
DATA:GR_LAYOUT TYPE REF TO CL_SALV_LAYOUT.
DATA:GR_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE.
DATA:GR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE.
DATA:GR_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE.
DATA:GR_DISPLAY_SETTINGS TYPE REF TO CL_SALV_DISPLAY_SETTINGS.
DATA:GS_PROGRAM TYPE SALV_S_LAYOUT_KEY."该结构包含了布局变式所属程序名
CLASS LCL_HANDLE_EVENTS DEFINITION.
PUBLIC SECTION.
METHODS: ON_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING
ROW "事件触发所在的行号
COLUMN."事件触发所在的列名
METHODS: ON_LINK_CLICK FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING
ROW "事件触发所在的行号
COLUMN."事件触发所在的列名
METHODS: ON_USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS_TABLE
IMPORTING E_SALV_FUNCTION.
ENDCLASS.
CLASS LCL_HANDLE_EVENTS IMPLEMENTATION.
METHOD ON_DOUBLE_CLICK.
* PERFORM show_cell_info USING row column 'is selected'.
MESSAGE '双击事件触发' TYPE 'S'.
ENDMETHOD.
METHOD ON_LINK_CLICK.
* PERFORM SHOW_CELL_INFO USING ROW COLUMN 'is selected with hotspot'.
MESSAGE '热点事件触发' TYPE 'S'.
ENDMETHOD.
METHOD ON_USER_COMMAND.
* PERFORM handle_user_command USING e_salv_function.
CASE E_SALV_FUNCTION.
WHEN '&IMP'.
MESSAGE '导入事件触发' TYPE 'S'.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
ENDCLASS.
***********************************************************************
**-----------------S E L E C T I O N---S C R E E N--------------------*
***********************************************************************
*
*SELECTION-SCREEN:BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001 .
** 区间
* SELECT-OPTIONS:
* S_FIELD FOR ITAB-FIELD NO INTERVALS NO-EXTENSION .
* SELECTION-SCREEN ULINE.
** 单值
* PARAMETERS:P_FIELD AS CHECKBOX, "复选框"
* P_RTN1 RADIOBUTTON GROUP G1, "单选按钮一"
* P_RTN2 RADIOBUTTON GROUP G1. "单选按钮二"
*SELECTION-SCREEN END OF BLOCK BK1.
***********************************************************************
**-------------------I N I T I A L I Z A T I O N----------------------*
***********************************************************************
*
*INITIALIZATION.
*
** PERFORM INI_SELECTION_SCREEN. " 初始化选择屏上的变量
*
*AT SELECTION-SCREEN OUTPUT.
*
** PERFORM FRM_INI_SCREEN. " 初始化选择屏幕
*
*AT SELECTION-SCREEN .
*
** PERFORM FRM_INI_DATA. " 初始化全局变量
***********************************************************************
**----------------S T A R T-O F-S E L E C T I O N---------------------*
***********************************************************************
START-OF-SELECTION.
PERFORM FRM_PRECESS_DATA. " 主要数据处理逻辑
END-OF-SELECTION.
PERFORM FRM_DISPLAY_DATA. " 数据展示输出
*&---------------------------------------------------------------------*
*& Form FRM_PRECESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_PRECESS_DATA .
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_DATA FROM SPFLI .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_DATA .
DATA:LR_EVENTS TYPE REF TO LCL_HANDLE_EVENTS.
DEFINE SET_ALV_FIELD.
DATA:l_color TYPE lvc_s_colo.
gr_column ?= GR_COLUMNS->GET_COLUMN( &1 ).
gr_column->set_long_text( &2 ).
gr_column->set_medium_text( &2 ).
gr_column->set_short_text( &2 ).
gr_column->set_optimized( &3 ).
gr_column->set_zero( &4 ).
gr_column->set_cell_type( &5 ).
l_color-col = &6.
l_color-int = &7.
l_color-inv = &8.
IF l_color IS NOT INITIAL.
gr_column->set_color( l_color ).
ENDIF.
END-OF-DEFINITION.
*
CALL METHOD CL_SALV_TABLE=>FACTORY
EXPORTING
LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
R_SALV_TABLE = GR_SALV_TABLE
CHANGING
T_TABLE = GT_DATA.
"设置工具栏按钮"
GR_FUNCTIONS = GR_SALV_TABLE->GET_FUNCTIONS( ).
GR_FUNCTIONS->SET_ALL( ABAP_TRUE ).
GR_SALV_TABLE->SET_SCREEN_STATUS( "系统提示的标准Status为SAPLSALV_METADATA_STATUS"
PFSTATUS = 'STANDARD_FULLSCREEN'
REPORT = SY-REPID
SET_FUNCTIONS = GR_SALV_TABLE->C_FUNCTIONS_ALL ). "显示所有通用的预设按钮"
"此参数只对SALV标准的预设保留按钮起作用,也就是说当T001 GUI Status是从系统中"
"提供的标准Gui Status拷贝时才起作用,即通过此参数来屏蔽或显示某些预置按钮"
"对自己完全新创建的GUI Status按钮(实质上是根据FunCode来判断的)不起作用"
"set_functions = co_alv->c_functions_default)." "显示基本默认选择性的预设按钮"
"set_functions = co_alv->c_functions_none)." "所有预设按钮都不显示"
"设置选择模式"
GR_SELECTIONS = GR_SALV_TABLE->GET_SELECTIONS( ).
GR_SELECTIONS->SET_SELECTION_MODE( 4 ).
"事件"
GR_EVENTS = GR_SALV_TABLE->GET_EVENT( ).
IF LR_EVENTS IS INITIAL .
CREATE OBJECT LR_EVENTS.
SET HANDLER LR_EVENTS->ON_DOUBLE_CLICK FOR GR_EVENTS. "双击事件"
SET HANDLER LR_EVENTS->ON_LINK_CLICK FOR GR_EVENTS. "热点事件"
SET HANDLER LR_EVENTS->ON_USER_COMMAND FOR GR_EVENTS. "自定义按钮事件"
ENDIF.
"设置布局"
GR_LAYOUT = GR_SALV_TABLE->GET_LAYOUT( ).
GS_PROGRAM-REPORT = SY-REPID.
GR_LAYOUT->SET_KEY( GS_PROGRAM )."设置布局保存为变式时,这些变式应属性此Key(本程序名)
GR_LAYOUT->SET_SAVE_RESTRICTION( CL_SALV_LAYOUT=>RESTRICT_NONE )."允许保存布局为变式
"ALV布局设置"
GR_DISPLAY_SETTINGS = GR_SALV_TABLE->GET_DISPLAY_SETTINGS( ).
GR_DISPLAY_SETTINGS->SET_STRIPED_PATTERN( ABAP_TRUE ). "斑马条纹"
GR_DISPLAY_SETTINGS->SET_HORIZONTAL_LINES( ABAP_TRUE ). "设置是否显示水平线"
GR_DISPLAY_SETTINGS->SET_VERTICAL_LINES( ABAP_TRUE ). "设置是否显示垂直线"
GR_DISPLAY_SETTINGS->SET_LIST_HEADER_SIZE( 2 ). "报表头"
GR_DISPLAY_SETTINGS->SET_FIT_COLUMN_TO_TABLE_SIZE( ABAP_TRUE ). "列自适应表格宽度"
"ALV字段设置"
GR_COLUMNS = GR_SALV_TABLE->GET_COLUMNS( ).
SET_ALV_FIELD: 'CITYTO' '自定义' 'X' 'X' '5' '6' '1' '0' .
CALL METHOD GR_SALV_TABLE->DISPLAY.
ENDFORM.