Things do not change. We do.
万物不变,是我们在变。
1
程序效果
2
源码分享
BEGIN OF gty_spfli_incl ,
cbox TYPE c ,
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 .
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 .
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'. "<\---ALV可编辑
"添加排序
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 ."字段目录
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 .FIELD-SYMBOLS <fcat> LIKE gs_fieldcat .
LOOP AT gt_fieldcat ASSIGNING <fcat> .CASE <fcat> \- fieldname .
WHEN 'DISTANCE' .
<fcat> \- do_sum = 'X' .
WHEN 'PERIOD' .
<fcat> \- no_out = 'X' . "不可见
<fcat> \- tech = 'X' . "不可用(技术列)
WHEN 'COUNTRYFR' .
<fcat> \- reptext = '起飞国家' .
<fcat> \- scrtext_s = '起飞国家' .
<fcat> \- scrtext_m = '起飞国家' .
<fcat> \- scrtext_l = '起飞国家' .
WHEN 'COUNTRYTO' .
<fcat> \- reptext = '到达国家' .
<fcat> \- scrtext_s = '到达国家' .
<fcat> \- scrtext_m = '到达国家' .
<fcat> \- scrtext_l = '到达国家' .
WHEN 'SNUM' .
<fcat> \- col_pos = 1 .
<fcat> \- just = 'C' .
<fcat> \- fix_column = 'X' .
WHEN 'ICON' .
<fcat> \- col_pos = 1 .
<fcat> \- icon = 'X' .
<fcat> \- just = 'C' .
<fcat> \- fix_column = 'X' .
<fcat> \- tooltip = '列标题:鼠标悬停有文本!' .
WHEN 'DEPTIME' OR 'ARRTIME' .
<fcat> \- emphasize = 'C510' .
WHEN 'CBOX' .
<fcat> \- col_pos = 1 .
<fcat> \- just = 'C' .
<fcat> \- fix_column = 'X' .
<fcat> \- checkbox = 'X' .
<fcat> \- edit = 'X' .
WHEN 'FLTYPE' .
<fcat> \- style = cl_gui_alv_grid => mc_style_button .*------------------------------------*
WHEN 'FLTIME' .
<fcat> \- edit = 'X' . "<\----列可编辑
*------------------------------------*
WHEN OTHERS .
ENDCASE .
ENDLOOP .CALL METHOD go_alv -> set_table_for_first_displayEXPORTING
is_variant = gs_variant
i_save = 'A'
is_layout = gs_layout
it_toolbar_excluding = gt_toolbar_exc
it_except_qinfo = gt_qinfo
CHANGING
it_outtab = gt_spfli
it_fieldcatalog = gt_fieldcat
it_sort = gt_sort
it_filter = gt_filter .
cl_abap_li
...