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.