1.效果图:

image.png

2.源代码:

  1. **&--------------------------「程序说明-START」------------------------*
  2. *
  3. **& ReportName: ZDEMO_SALV
  4. *
  5. **& Packet: ZPZYH
  6. *
  7. **& Author: ZhangYunhu
  8. *
  9. **& CreatedDate: 14.06.2022 13:55:08
  10. *
  11. **& Intention :
  12. *
  13. ** Detail:
  14. *
  15. *
  16. **&--------------------------「程序说明-END」--------------------------*
  17. REPORT ZDEMO_SALV.
  18. ***********************************************************************
  19. **---------------------------T A B L E S------------------------------*
  20. ***********************************************************************
  21. DATA:GT_DATA TYPE TABLE OF SPFLI.
  22. ***********************************************************************
  23. **------------------------V A R I A B L E S---------------------------*
  24. ***********************************************************************
  25. DATA:GR_SALV_TABLE TYPE REF TO CL_SALV_TABLE.
  26. DATA:GR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST.
  27. DATA:GR_SELECTIONS TYPE REF TO CL_SALV_SELECTIONS.
  28. DATA:GR_LAYOUT TYPE REF TO CL_SALV_LAYOUT.
  29. DATA:GR_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE.
  30. DATA:GR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE.
  31. DATA:GR_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE.
  32. DATA:GR_DISPLAY_SETTINGS TYPE REF TO CL_SALV_DISPLAY_SETTINGS.
  33. DATA:GS_PROGRAM TYPE SALV_S_LAYOUT_KEY."该结构包含了布局变式所属程序名
  34. CLASS LCL_HANDLE_EVENTS DEFINITION.
  35. PUBLIC SECTION.
  36. METHODS: ON_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE
  37. IMPORTING
  38. ROW "事件触发所在的行号
  39. COLUMN."事件触发所在的列名
  40. METHODS: ON_LINK_CLICK FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE
  41. IMPORTING
  42. ROW "事件触发所在的行号
  43. COLUMN."事件触发所在的列名
  44. METHODS: ON_USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS_TABLE
  45. IMPORTING E_SALV_FUNCTION.
  46. ENDCLASS.
  47. CLASS LCL_HANDLE_EVENTS IMPLEMENTATION.
  48. METHOD ON_DOUBLE_CLICK.
  49. * PERFORM show_cell_info USING row column 'is selected'.
  50. MESSAGE '双击事件触发' TYPE 'S'.
  51. ENDMETHOD.
  52. METHOD ON_LINK_CLICK.
  53. * PERFORM SHOW_CELL_INFO USING ROW COLUMN 'is selected with hotspot'.
  54. MESSAGE '热点事件触发' TYPE 'S'.
  55. ENDMETHOD.
  56. METHOD ON_USER_COMMAND.
  57. * PERFORM handle_user_command USING e_salv_function.
  58. CASE E_SALV_FUNCTION.
  59. WHEN '&IMP'.
  60. MESSAGE '导入事件触发' TYPE 'S'.
  61. WHEN OTHERS.
  62. ENDCASE.
  63. ENDMETHOD.
  64. ENDCLASS.
  65. ***********************************************************************
  66. **-----------------S E L E C T I O N---S C R E E N--------------------*
  67. ***********************************************************************
  68. *
  69. *SELECTION-SCREEN:BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001 .
  70. ** 区间
  71. * SELECT-OPTIONS:
  72. * S_FIELD FOR ITAB-FIELD NO INTERVALS NO-EXTENSION .
  73. * SELECTION-SCREEN ULINE.
  74. ** 单值
  75. * PARAMETERS:P_FIELD AS CHECKBOX, "复选框"
  76. * P_RTN1 RADIOBUTTON GROUP G1, "单选按钮一"
  77. * P_RTN2 RADIOBUTTON GROUP G1. "单选按钮二"
  78. *SELECTION-SCREEN END OF BLOCK BK1.
  79. ***********************************************************************
  80. **-------------------I N I T I A L I Z A T I O N----------------------*
  81. ***********************************************************************
  82. *
  83. *INITIALIZATION.
  84. *
  85. ** PERFORM INI_SELECTION_SCREEN. " 初始化选择屏上的变量
  86. *
  87. *AT SELECTION-SCREEN OUTPUT.
  88. *
  89. ** PERFORM FRM_INI_SCREEN. " 初始化选择屏幕
  90. *
  91. *AT SELECTION-SCREEN .
  92. *
  93. ** PERFORM FRM_INI_DATA. " 初始化全局变量
  94. ***********************************************************************
  95. **----------------S T A R T-O F-S E L E C T I O N---------------------*
  96. ***********************************************************************
  97. START-OF-SELECTION.
  98. PERFORM FRM_PRECESS_DATA. " 主要数据处理逻辑
  99. END-OF-SELECTION.
  100. PERFORM FRM_DISPLAY_DATA. " 数据展示输出
  101. *&---------------------------------------------------------------------*
  102. *& Form FRM_PRECESS_DATA
  103. *&---------------------------------------------------------------------*
  104. *& text
  105. *&---------------------------------------------------------------------*
  106. *& --> p1 text
  107. *& <-- p2 text
  108. *&---------------------------------------------------------------------*
  109. FORM FRM_PRECESS_DATA .
  110. SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_DATA FROM SPFLI .
  111. ENDFORM.
  112. *&---------------------------------------------------------------------*
  113. *& Form FRM_DISPLAY_DATA
  114. *&---------------------------------------------------------------------*
  115. *& text
  116. *&---------------------------------------------------------------------*
  117. *& --> p1 text
  118. *& <-- p2 text
  119. *&---------------------------------------------------------------------*
  120. FORM FRM_DISPLAY_DATA .
  121. DATA:LR_EVENTS TYPE REF TO LCL_HANDLE_EVENTS.
  122. DEFINE SET_ALV_FIELD.
  123. DATA:l_color TYPE lvc_s_colo.
  124. gr_column ?= GR_COLUMNS->GET_COLUMN( &1 ).
  125. gr_column->set_long_text( &2 ).
  126. gr_column->set_medium_text( &2 ).
  127. gr_column->set_short_text( &2 ).
  128. gr_column->set_optimized( &3 ).
  129. gr_column->set_zero( &4 ).
  130. gr_column->set_cell_type( &5 ).
  131. l_color-col = &6.
  132. l_color-int = &7.
  133. l_color-inv = &8.
  134. IF l_color IS NOT INITIAL.
  135. gr_column->set_color( l_color ).
  136. ENDIF.
  137. END-OF-DEFINITION.
  138. *
  139. CALL METHOD CL_SALV_TABLE=>FACTORY
  140. EXPORTING
  141. LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
  142. * R_CONTAINER =
  143. * CONTAINER_NAME =
  144. IMPORTING
  145. R_SALV_TABLE = GR_SALV_TABLE
  146. CHANGING
  147. T_TABLE = GT_DATA.
  148. "设置工具栏按钮"
  149. GR_FUNCTIONS = GR_SALV_TABLE->GET_FUNCTIONS( ).
  150. GR_FUNCTIONS->SET_ALL( ABAP_TRUE ).
  151. GR_SALV_TABLE->SET_SCREEN_STATUS( "系统提示的标准Status为SAPLSALV_METADATA_STATUS"
  152. PFSTATUS = 'STANDARD_FULLSCREEN'
  153. REPORT = SY-REPID
  154. SET_FUNCTIONS = GR_SALV_TABLE->C_FUNCTIONS_ALL ). "显示所有通用的预设按钮"
  155. "此参数只对SALV标准的预设保留按钮起作用,也就是说当T001 GUI Status是从系统中"
  156. "提供的标准Gui Status拷贝时才起作用,即通过此参数来屏蔽或显示某些预置按钮"
  157. "对自己完全新创建的GUI Status按钮(实质上是根据FunCode来判断的)不起作用"
  158. "set_functions = co_alv->c_functions_default)." "显示基本默认选择性的预设按钮"
  159. "set_functions = co_alv->c_functions_none)." "所有预设按钮都不显示"
  160. "设置选择模式"
  161. GR_SELECTIONS = GR_SALV_TABLE->GET_SELECTIONS( ).
  162. GR_SELECTIONS->SET_SELECTION_MODE( 4 ).
  163. "事件"
  164. GR_EVENTS = GR_SALV_TABLE->GET_EVENT( ).
  165. IF LR_EVENTS IS INITIAL .
  166. CREATE OBJECT LR_EVENTS.
  167. SET HANDLER LR_EVENTS->ON_DOUBLE_CLICK FOR GR_EVENTS. "双击事件"
  168. SET HANDLER LR_EVENTS->ON_LINK_CLICK FOR GR_EVENTS. "热点事件"
  169. SET HANDLER LR_EVENTS->ON_USER_COMMAND FOR GR_EVENTS. "自定义按钮事件"
  170. ENDIF.
  171. "设置布局"
  172. GR_LAYOUT = GR_SALV_TABLE->GET_LAYOUT( ).
  173. GS_PROGRAM-REPORT = SY-REPID.
  174. GR_LAYOUT->SET_KEY( GS_PROGRAM )."设置布局保存为变式时,这些变式应属性此Key(本程序名)
  175. GR_LAYOUT->SET_SAVE_RESTRICTION( CL_SALV_LAYOUT=>RESTRICT_NONE )."允许保存布局为变式
  176. "ALV布局设置"
  177. GR_DISPLAY_SETTINGS = GR_SALV_TABLE->GET_DISPLAY_SETTINGS( ).
  178. GR_DISPLAY_SETTINGS->SET_STRIPED_PATTERN( ABAP_TRUE ). "斑马条纹"
  179. GR_DISPLAY_SETTINGS->SET_HORIZONTAL_LINES( ABAP_TRUE ). "设置是否显示水平线"
  180. GR_DISPLAY_SETTINGS->SET_VERTICAL_LINES( ABAP_TRUE ). "设置是否显示垂直线"
  181. GR_DISPLAY_SETTINGS->SET_LIST_HEADER_SIZE( 2 ). "报表头"
  182. GR_DISPLAY_SETTINGS->SET_FIT_COLUMN_TO_TABLE_SIZE( ABAP_TRUE ). "列自适应表格宽度"
  183. "ALV字段设置"
  184. GR_COLUMNS = GR_SALV_TABLE->GET_COLUMNS( ).
  185. SET_ALV_FIELD: 'CITYTO' '自定义' 'X' 'X' '5' '6' '1' '0' .
  186. CALL METHOD GR_SALV_TABLE->DISPLAY.
  187. ENDFORM.