*&好处:
*&简单快捷,用来做个弹窗,或者作为明细的显示窗口,有很高的便捷性。
*&限制(缺点):
*&•列数限制为90。
*&•列的输出长度限制为128个字符。
*&•ALV的结构使用户可以在屏幕上操作您的表格。尽管ALV为打印表格提供了几个基本功能,但它并不用于配置缩小的打印布局。
*&•对于排序和小计,您最多使用九个级别或列。
*&•对于可聚合列,确保列的内部长度足够大,不仅适用于单个值,也适用于结果。
*&•输出列是面向列的。只能显示平面结构的表。不能显示嵌套的表和结构。
*&•使用ALV显示的表格不可用于输入。
*&•如果将表格用作容器中的网格,则不能使用批处理模式。
*&•总计和小计的输出由ALV单独处理。您既不能将结果传递给应用程序,也不能以任何方式操纵它们。
DATA:go_alv TYPE REF TO cl_salv_table. "ALV Table DATA BEGIN OF ty_alv. INCLUDE TYPE mara. DATA:del TYPE char10, z TYPE i. DATA END OF ty_alv. DATA:gs_mara LIKE ty_alv, gt_mara LIKE TABLE OF ty_alv. "事件类的定义 CLASS l_cl_handle_events DEFINITION. PUBLIC SECTION. "用户操作按钮 METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table IMPORTING e_salv_function. "双击事件 METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. "方法实现 CLASS l_cl_handle_events IMPLEMENTATION. METHOD on_user_command. PERFORM handle_user_command USING e_salv_function. ENDMETHOD. METHOD on_double_click. PERFORM show_cell_info USING row column. ENDMETHOD. ENDCLASS. START-OF-SELECTION. SELECT * FROM mara INTO TABLE gt_mara UP TO 100 ROWS. TRY . cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_mara ). CATCH cx_salv_msg. ENDTRY. "给列设置长文本 go_alv->get_columns( )->get_column( 'DEL' )->set_long_text( '删除' ). go_alv->get_columns( )->get_column( 'Z' )->set_long_text( '自定义' ). "自动列宽 go_alv->get_columns( )->set_optimize( 'X' ). "斑马线 go_alv->get_display_settings( )->set_striped_pattern( 'X' ). "set selection mode 可以行列进行选择 go_alv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ). *******标准按钮和自定义状态使用一个就好 "标准按钮 * go_alv->get_functions( )->set_all( abap_true ). "将激活所以的ALV内置通用按钮 "使用自己定义的PF状态 go_alv->set_screen_status( pfstatus = 'IT017_PF' "SE41->状态按钮->程序:SAPLKKBL,状态:STANDARD 复制到知道程序和状态 report = sy-repid set_functions = go_alv->c_functions_all ). "设置屏幕大小,若是要全屏,就注释如下代码 IF go_alv IS BOUND. go_alv->set_screen_popup( start_column = 30 end_column = 160 start_line = 5 end_line = 20 ). ENDIF. "获取事件对象 DATA: lr_event TYPE REF TO cl_salv_events_table. lr_event = go_alv->get_event( ). "事件注册 DATA: lr_handle_event TYPE REF TO l_cl_handle_events. CREATE OBJECT lr_handle_event. SET HANDLER lr_handle_event->on_user_command FOR lr_event. SET HANDLER lr_handle_event->on_double_click FOR lr_event. "显示 go_alv->display( ). FORM handle_user_command USING p_function TYPE salv_de_function. CASE p_function. WHEN 'ZB'. "获取选中的行/列 DATA(lv_rows) = go_alv->get_selections( )->get_selected_rows( ). READ TABLE lv_rows INTO DATA(ls_row) INDEX 1. IF sy-subrc = 0. MODIFY gt_mara FROM VALUE #( Z = '7' ) INDEX ls_row TRANSPORTING Z. ENDIF. go_alv->refresh( ). WHEN OTHERS. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form show_cell_info *&---------------------------------------------------------------------* FORM show_cell_info USING p_row TYPE i p_column TYPE lvc_fname. MESSAGE '行:' && p_row && ',列:' && p_column TYPE 'I'. ENDFORM.
结果:
固定窗口图:
浮窗图: