1.定义**
TYPE-POOLS : slis.
DATA:g_container TYPE scrfname VALUE 'ALV_CON',
g_grid TYPE REF TO cl_gui_alv_grid,
g_con TYPE REF TO cl_gui_custom_container,
gs_layout TYPE lvc_s_layo,
gs_variant TYPE disvariant.
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: g_event_receiver TYPE REF TO lcl_event_receiver.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
"处理更改
METHODS handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
"双击
METHODS catch_doubleclick
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no .
"热键
METHODS handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id
e_column_id
es_row_no.
"工具
METHODS handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive.
实现用户命令
METHODS handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
"F4 HELP11
METHODS on_f4_help11
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display.
ENDCLASS.
2.layout赋值
同函数alv
3.fieldcat赋值
同函数alv
4.方法实施
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_data_changed. "更改的数据CHECK或者做其他处理
gt_chan = er_data_changed->mt_mod_cells[].
IF gt_chan IS NOT INITIAL.
PERFORM frm_data_changed USING gt_chan.
ENDIF.
CLEAR gt_chan.
CALL METHOD g_grid1->refresh_table_display.
ENDMETHOD. "handle_data_changed
METHOD catch_doubleclick.
PERFORM frm_alv_doubleclick USING e_row e_column es_row_no.
ENDMETHOD. "catch_doubleclick
METHOD handle_hotspot_click.
PERFORM frm_hotspot_click USING e_row_id e_column_id es_row_no.
ENDMETHOD. "handle_hotspot_click
METHOD handle_toolbar.
PERFORM frm_handle_toolbar USING e_object e_interactive.
ENDMETHOD. "HANDLE_TOOLBAR
METHOD handle_user_command.
PERFORM frm_handle_user_command USING e_ucomm.
ENDMETHOD. "HANDLE_USER_COMMAND
"F4 HELP11
METHOD on_f4_help11.
PERFORM frm_f4_help11 USING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display.
ENDMETHOD. "on_f4_help11
ENDCLASS.
5.CALL SCREEN 屏幕号
"屏幕PBO
process before output.
MODULE status_0100.
MODULE screen_field.
"屏幕PAI
process after input.
MODULE user_command_0100.
MODULE status_0100 OUTPUT.
SET PF-STATUS 'PF100'.
SET TITLEBAR 'ST100'.
PERFORM ini_alv_grid.
ENDMODULE.
"屏幕字段属性设置
MODULE screen_field OUTPUT.
LOOP AT SCREEN.
screen-input = 0.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.
"屏幕动作获取
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'EXIT' OR '&F03'.
SET SCREEN 0.
WHEN '&SAVE'.
PERFORM frm_save_data.
ENDCASE.
ENDMODULE.
FORM ini_alv_grid .
DATA:ls_stable TYPE lvc_s_stbl.
IF g_con IS INITIAL.
CREATE OBJECT g_con
EXPORTING
container_name = g_container.
CREATE OBJECT g_grid
EXPORTING
i_parent = g_con.
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CREATE OBJECT g_event_receiver.
SET HANDLER g_event_receiver->handle_hotspot_click FOR g_grid.
SET HANDLER g_event_receiver->handle_data_changed FOR g_grid.
SET HANDLER g_event_receiver->handle_toolbar FOR g_grid.
SET HANDLER g_event_receiver->catch_doubleclick FOR g_grid.
SET HANDLER g_event_receiver->handle_user_command FOR g_grid.
“隐藏某些工具栏按钮
PERFORM exclude_tb_functions CHANGING gt_exclude.
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
is_variant = gs_variant
i_save = 'A'
CHANGING
it_outtab = gt_list[]
it_fieldcatalog = lt_fieldcat[].
ELSE.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
CALL METHOD g_grid->refresh_table_display
EXPORTING
is_stable = ls_stable
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
ENDFORM.
FORM exclude_tb_functions CHANGING ct_exclude TYPE ui_functions .
DATA ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_excl_all.
APPEND ls_exclude TO ct_exclude.
ENDFORM. " exclude_tb_functions