Knowing is not enough; we must apply.
光是知道是不够的; 我们必须能够应用。
1
程序效果
2
源码分享
BEGIN OF gty_spfli_incl ,
cbox TYPE c ,
ddfi TYPE char2 ,
f4fi TYPE char2 ,
snum TYPE i ,
icon TYPE icon_d ,
scol TYPE lvc_t_scol ,
styl TYPE lvc_t_styl ,
END OF gty_spfli_incl .BEGIN OF gs_spfli .
INCLUDE TYPE spfli .
INCLUDE TYPE gty_spfli_incl .END OF gs_spfli ,gt_spfli LIKE TABLE OF gs_spfli .
DATA go_alv TYPE REF TO cl_gui_alv_grid .
DATA gs_layout TYPE lvc_s_layo .
DATA gt_fieldcat TYPE lvc_t_fcat .
DATA gs_fieldcat TYPE lvc_s_fcat .
DATA gs_sort TYPE lvc_s_sort .
DATA gt_sort TYPE lvc_t_sort .
DATA gt_filter TYPE lvc_t_filt .
DATA gs_filter TYPE lvc_s_filt .
DATA gs_variant TYPE disvariant .
DATA gt_qinfo TYPE alv_t_qinf .
DATA gs_qinfo TYPE alv_s_qinf .
DATA gt_toolbar_exc TYPE ui_functions .
DATA gt_f4 TYPE lvc_t_f4 .
DATA gs_f4 TYPE lvc_s_f4 .
INITIALIZATION .
sy \- title = 'ABAP OOALV演示程序-公众号(ABAP猿)' .
gs_variant \- report = sy \- repid .
START-OF-SELECTION .
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli UP TO30 ROWS .
DATA ls_ctyp TYPE salv_s_int4_column .
DATA ls_scol TYPE lvc_s_scol .
DATA ls_styl TYPE lvc_s_styl .
LOOP AT gt_spfli INTO gs_spfli .gs_spfli \- snum = sy \- tabix .
CASE sy \- tabix .
WHEN 1 .
gs_spfli \- icon = '@5B@' .
"行颜色
CLEAR ls_scol .
ls_scol \- color \- col = 5 .
ls_scol \- color \- int = 1 .
ls_scol \- color \- inv = 0 .ls_scol \- fname = '' .
ls_scol \- nokeycol = '' .
APPEND ls_scol TO gs_spfli \- scol .WHEN 2 .
gs_spfli \- icon = '@5C@' .
"行颜色(覆盖Key颜色)
CLEAR ls_scol .
ls_scol \- color \- col = 6 .
ls_scol \- color \- int = 1 .
ls_scol \- color \- inv = 0 .ls_scol \- fname = '' .
ls_scol \- nokeycol = 'X' . "避免被Key颜色覆盖
APPEND ls_scol TO gs_spfli \- scol .WHEN 3 .
gs_spfli \- icon = '@5D@' .
"单元格颜色
CLEAR ls_scol .
ls_scol \- color \- col = 3 .
ls_scol \- color \- int = 1 .
ls_scol \- color \- inv = 0 .ls_scol \- fname = 'COUNTRYFR' .
ls_scol \- nokeycol = 'X' .
APPEND ls_scol TO gs_spfli \- scol .ls_scol \- fname = 'COUNTRYTO' .
APPEND ls_scol TO gs_spfli \- scol .ls_scol \- fname = 'FLTIME' .
APPEND ls_scol TO gs_spfli \- scol .WHEN 4 .
"行样式(button)
CLEAR ls_styl .
ls_styl \- fieldname = '' .
ls_styl \- style = cl_gui_alv_grid => mc_style_button .
APPEND ls_styl TO gs_spfli \- styl .WHEN 5 .
"行样式(hotspot)
CLEAR ls_styl .
ls_styl \- fieldname = '' .
ls_styl \- style = cl_gui_alv_grid => mc_style_hotspot .
APPEND ls_styl TO gs_spfli \- styl .WHEN 6 .
"单元格样式(button + hotspot)
CLEAR ls_styl .
ls_styl \- fieldname = 'COUNTRYFR' .
ls_styl \- style = cl_gui_alv_grid => mc_style_button .
APPEND ls_styl TO gs_spfli \- styl .CLEAR ls_styl .
ls_styl \- fieldname = 'COUNTRYTO' .
ls_styl \- style = cl_gui_alv_grid => mc_style_hotspot .
APPEND ls_styl TO gs_spfli \- styl .WHEN 7 .
"行可编辑
CLEAR ls_styl .
ls_styl \- fieldname = '' .
ls_styl \- style = cl_gui_alv_grid => mc_style_enabled .
APPEND ls_styl TO gs_spfli \- styl .WHEN 8 .
"单元格可编辑
CLEAR ls_styl .
ls_styl \- fieldname = 'COUNTRYFR' .
ls_styl \- style = cl_gui_alv_grid => mc_style_enabled .
APPEND ls_styl TO gs_spfli \- styl .CLEAR ls_styl .
ls_styl \- fieldname = 'COUNTRYTO' .
ls_styl \- style = cl_gui_alv_grid => mc_style_enabled .
APPEND ls_styl TO gs_spfli \- styl .WHEN OTHERS .
ENDCASE .
MODIFY gt_spfli FROM gs_spfli .
ENDLOOP .CREATE OBJECT go_alv
EXPORTING
i_parent = cl_gui_container => default_screen .DATA lo_evt_handler TYPE REF TO lcl_evt_handler .
CREATE OBJECT lo_evt_handler .
lo_evt_handler -> toolbar FOR go_alv ,
lo_evt_handler -> hotspot_click FOR go_alv ,
lo_evt_handler -> double_click FOR go_alv ,
lo_evt_handler -> before_user_command FOR go_alv ,
lo_evt_handler -> user_command FOR go_alv ,
lo_evt_handler -> after_user_command FOR go_alv ,
lo_evt_handler -> onf4 FOR go_alv ,
lo_evt_handler -> data_changed FOR go_alv ,
lo_evt_handler -> data_changed_finished FOR go_alv ,
*------------------------------------*
lo_evt_handler -> menu_button FOR go_alv ,
lo_evt_handler -> button_click FOR go_alv .
*------------------------------------*
CLEAR gs_layout .
gs_layout \- zebra = 'X' .
gs_layout \- cwidth_opt = 'X' .
gs_layout \- sel_mode = 'D' .
gs_layout \- keyhot = 'X' .
gs_layout \- no_keyfix = 'X' .
gs_layout \- ctab_fname = 'SCOL' .
gs_layout \- stylefname = 'STYL' .
• gs_layout-no_toolbar = 'X'.
• gs_layout-edit = 'X'.
"添加排序
CLEAR gs_sort .
gs_sort \- spos = '1' .
gs_sort \- fieldname = 'CARRID' .
gs_sort \- subtot = 'X' .
gs_sort \- up = 'X' .
gs_sort \- down = '' .
APPEND gs_sort TO gt_sort ."添加过滤
CLEAR gs_filter .
gs_filter \- fieldname = 'CARRID' .
gs_filter \- sign = 'E' .
gs_filter \- option = 'EQ' .
gs_filter \- low = 'JL' .
APPEND gs_filter TO gt_filter ."添加鼠标悬停文本
gs_qinfo \- type = cl_salv_tooltip => c_type_icon .gs_qinfo \- value = '@5B@' .
gs_qinfo \- text = '图标值:绿灯!' .
APPEND gs_qinfo TO gt_qinfo .gs_qinfo \- type = cl_salv_tooltip => c_type_icon .gs_qinfo \- value = '@5C@' .
gs_qinfo \- text = '图标值:红灯!' .
APPEND gs_qinfo TO gt_qinfo .gs_qinfo \- type = cl_salv_tooltip => c_type_icon .gs_qinfo \- value = '@5D@' .
gs_qinfo \- text = '图标值:黄灯!' .
APPEND gs_qinfo TO gt_qinfo ."隐藏应用程序工具栏按钮
APPEND cl_gui_alv_grid => mc_fc_loc_paste_new_row TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_copy TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_append_row TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_copy_row TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_insert_row TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_delete_row TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_move_row TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_cut TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_paste TO gt_toolbar_exc .
APPEND cl_gui_alv_grid => mc_fc_loc_undo TO gt_toolbar_exc .DATA lt_dropval TYPE lvc_t_drop .
DATA ls_dropval TYPE lvc_s_drop .
CLEAR ls_dropval .
ls_dropval \- handle = 1 .
ls_dropval \- value = '绿灯' .
APPEND ls_dropval TO lt_dropval .ls_dropval \- value = '红灯' .
APPEND ls_dropval TO lt_dropval .ls_dropval \- value = '黄灯' .
APPEND ls_dropval TO lt_dropval .ls_dropval \- value = '' .
APPEND ls_dropval TO lt_dropval .CALL METHOD go_alv -> set_drop_down_tableEXPORTING
it_drop_down = lt_dropval .CLEAR gs_f4 .
gs_f4 \- fieldname = 'F4FI' .
gs_f4 \- register = 'X' .
gs_f4 \- getbefore = 'X' .
gs_f4 \- chngeafter = 'X' .
gs_f4 \- internal = '' .
APPEND gs_f4 TO gt_f4 .CALL METHOD go_alv -> register_f4_for_fieldsEXPORTING
it_f4 = gt_f4 .
go_alv -> register_edit_event ( EXPORTING i_event_id = cl_gui_alv_grid=> mc_evt_modified ).
go_alv -> register_edit_event ( EXPORTING i_event_id = cl_gui_alv_grid=> mc_evt_enter ).
"字段目录
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'EXPORTING
i_structure_name = 'SPFLI'
CHANGING
ct_fieldcat = gt_fieldcat .
"添加输出列
CLEAR gs_fieldcat .
gs_fieldcat \- fieldname = 'SNUM' .
gs_fieldcat \- reptext = '序号' .
APPEND gs_fieldcat TO gt_fieldcat .CLEAR gs_fieldcat .
gs_fieldcat \- fieldname = 'ICON' .
gs_fieldcat \- reptext = '图标' .
APPEND gs_fieldcat TO gt_fieldcat .CLEAR gs_fieldcat .
gs_fieldcat \- fieldname = 'CBOX' .
gs_fieldcat \- reptext = '选择' .
APPEND gs_fieldcat TO gt_fieldcat .CLEAR gs_fieldcat .
gs_fieldcat \- fieldname = 'DDFI' .
gs_fieldcat \- reptext = '下拉列表' .
APPEND gs_fieldcat TO gt_fieldcat .CLEAR gs_fieldcat .
...