通过类CL_SALV_DISPLAY_SETTINGS我们可以设置ALV的显示样式,主要包括ALV表头名称,列表颜色间隔显示,水平线是否显示,竖线是否显示等。
我们要取得类CL_SALV_DISPLAY_SETTINGS的实例,根据类CL_SALV_TABLE的方法get_display_settings可以取得显示样式的实例。
REPORT ZSALV-01. *SALV自定义按钮功能 *变量定义 DATA: S_ALV TYPE REF TO CL_SALV_TABLE. "class 定义 CLASS SALV_DISPLAY DEFINITION."基础类 PUBLIC SECTION. METHODS: DISPLAYDATA ."方法 EVENTS:FUNCTION ."事件 PRIVATE SECTION. DATA:LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS, LR_EVENTS TYPE REF TO CL_SALV_EVENTS, LR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS. ENDCLASS. CLASS SET_HANDLER DEFINITION. PUBLIC SECTION. "理解为为某个类的事件而产生的方法,相当于将2个类关联起来 METHODS:USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS_TABLE"直接使用该类的function事件 IMPORTING E_SALV_FUNCTION. ENDCLASS. "class 实现 CLASS SALV_DISPLAY IMPLEMENTATION. METHOD DISPLAYDATA. SELECT * INTO TABLE @DATA(LT_VBAK) FROM VBAK UP TO 10 ROWS. TRY. CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = S_ALV CHANGING T_TABLE = LT_VBAK ). CATCH CX_SALV_MSG . ENDTRY. LR_EVENTS = S_ALV->GET_EVENT( )."获取事件 "设置ALV按钮功能 S_ALV->SET_SCREEN_STATUS( PFSTATUS = 'SALV_STANDARD' REPORT = SY-REPID SET_FUNCTIONS = S_ALV->C_FUNCTIONS_ALL ). *-------------------------- 设置ALV的显示样式------------------------------------------- LR_DISPLAY = S_ALV->GET_DISPLAY_SETTINGS( ). LR_DISPLAY->SET_STRIPED_PATTERN( 'X' )."设置颜色间隔显示 LR_DISPLAY->SET_LIST_HEADER( 'SLV展示报表DEMO' ). "设置ALV的抬头 LR_DISPLAY->SET_HORIZONTAL_LINES( '' ). "设置水平线是否显示 LR_DISPLAY->SET_VERTICAL_LINES( '' ). "设置垂直线是否显示 *-------------------------- 设置ALV的显示样式------------------------------------------- "=====事件注册 DATA:HANDLER TYPE REF TO SET_HANDLER. CREATE OBJECT HANDLER. SET HANDLER HANDLER->USER_COMMAND FOR ALL INSTANCES. S_ALV->DISPLAY( ). ENDMETHOD. ENDCLASS. CLASS SET_HANDLER IMPLEMENTATION. METHOD USER_COMMAND. PERFORM USER_CLICK USING E_SALV_FUNCTION. ENDMETHOD. ENDCLASS. FORM USER_CLICK USING P_SALV_FUNCTION TYPE SALV_DE_FUNCTION. CASE P_SALV_FUNCTION. WHEN '&CLICK'. MESSAGE '你点击了我!' TYPE 'I'. S_ALV->REFRESH( ). ENDCASE. ENDFORM. START-OF-SELECTION. DATA:LR_ALV TYPE REF TO SALV_DISPLAY. CREATE OBJECT LR_ALV. LR_ALV->DISPLAYDATA( ).
显示效果可以和上一篇作对比