這里總結最近用cl_salv_table實現ALV遇到問題和解決辦法
FORM set_alv2 . DATA: lv_syrepid TYPE syrepid. lv_syrepid = sy-cprog. cl_salv_table=>factory( EXPORTING list_display = abap_false r_container = cl_gui_container=>screen0 IMPORTING r_salv_table = gr_alv CHANGING t_table = gt_doc ). “傳輸需要顯示的內表 gr_functions = gr_alv->get_functions( ). "獲取常用的ALV功能按鈕 DATA lv_icon TYPE string. lv_icon = icon_refresh. gr_functions->add_function( "添加自定義按鈕 EXPORTING name = 'DOWNLOAD' icon = '@M9@' text = '下載文檔' tooltip = '下載文檔' position = if_salv_c_function_position=>right_of_salv_functions ). "往右邊排 gr_functions->add_function( EXPORTING name = 'SELECT_ALL' icon = '@4B@' text = '全選' tooltip = '全選' position = if_salv_c_function_position=>left_of_salv_functions ). "往右邊排 gr_functions->add_function( EXPORTING name = 'DESELECT_ALL' icon = '@4D@' text = '取消全選' tooltip = '取消全選' position = if_salv_c_function_position=>left_of_salv_functions ). "往右邊排 gr_functions->set_all( abap_true ). ”設置所有alv按鈕(自帶的+自定義的) "=====獲取事件對象 DATA: gr_event TYPE REF TO cl_salv_events_table. gr_event = gr_alv->get_event( ). "=====事件注冊 DATA: gr_handle_event TYPE REF TO cl_handle_events. CREATE OBJECT gr_handle_event. SET HANDLER gr_handle_event->on_user_command FOR gr_event. SET HANDLER gr_handle_event->on_checkbox FOR gr_event. DATA: gr_column_list TYPE REF TO cl_salv_column_list. gr_columns = gr_alv->get_columns( ). "獲取列的class gr_column = gr_columns->get_column('ACTION_NO'). "獲取該列 gr_column->set_short_text('需求號'). "調用修改列名稱的方法 gr_columns->set_optimize( abap_true ). "調用設置列最優化設置方法這邊用到列實例是gr_colums不是gr_colum gr_column = gr_columns->get_column('FLAG'). gr_column->set_short_text('選擇'). gr_columnt ?= gr_column. "這邊很重要 gr_columnt->set_cell_type( 6 ). "設置選擇列為checkbox,6代表checkbox gr_display = gr_alv->get_display_settings( ). "alv設置 gr_display->set_list_header('需求號&文檔編號報表'). "alv抬頭設置 gr_alv->display( )."調用實例方法顯示表報 "調用顯示alv方法展示ALV報表 ENDFORM. " SET_ALV2
下面是是事件的class的定義
CLASS cl_handle_events DEFINITION. PUBLIC SECTION. METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table IMPORTING e_salv_function, on_checkbox FOR EVENT link_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. CLASS cl_handle_events IMPLEMENTATION. METHOD on_user_command. PERFORM handle_user_command USING e_salv_function. ENDMETHOD. METHOD on_checkbox. PERFORM handle_clickbox USING row column. ENDMETHOD. ENDCLASS.
事件的方法定義
FORM handle_user_command USING p_function TYPE salv_de_function. CASE p_function. WHEN 'DOWNLOAD'. PERFORM down_doc. WHEN 'DESELECT_ALL'. gs_doc-flag = ' '. MODIFY gt_doc FROM gs_doc TRANSPORTING flag WHERE flag = 'X'. WHEN 'SELECT_ALL'. gs_doc-flag = 'X'. MODIFY gt_doc FROM gs_doc TRANSPORTING flag WHERE flag = ' '. ENDCASE. gr_alv->refresh( ). ENDFORM.