ABAPOOALV 样式列行单元格

作者:ABAP猿 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
目录
ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图

# ABAP OOALV-样式(列、行、单元格)

原创 猿ABAP [ ABAP猿 ](javascript:void\(0\);)

__ _ _ _ _

ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图

I attribute my success to this: I never gave or took any excuse.

我将成功归功于这一点:从不给或找任何借口。

• * *

ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图

1

程序效果

ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图

2

源码分享

TYPES

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 .

DATA

BEGIN OF gs_spfli .

INCLUDE TYPE spfli . INCLUDE TYPE gty_spfli_incl .

DATA

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 .

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 TO

30 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 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 .

SET 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' .

"添加排序

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 .

"字段目录

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 OTHERS .

ENDCASE . ENDLOOP .
CALL METHOD go_alv -> set_table_for_first_display

EXPORTING

is_variant = gs_variant

i_save = 'A'

is_layout = gs_layout

it_except_qinfo = gt_qinfo

CHANGING

it_outtab = gt_spfli

it_fieldcatalog = gt_fieldcat

it_sort = gt_sort

it_filter = gt_filter .

cl_abap_list_layout => suppress_toolbar ( ).

WRITE space .

3

AI解释

ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图

仅供参考

ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图

ABAP OOALV 高级功能演示

介绍:

在这个ABAP

OOALV演示程序的基础上,我们添加了三项新功能:复选框、列样式、行样式和单元格样式。这将使你的报表更加灵活和易于使用。让我们逐一了解这些新功能。

1\. 复选框的添加:

在这个例子中,我们为报表中的每一行添加了一个复选框,用于让用户选择或取消选择特定行。这对于需要批量处理数据或进行筛选操作时非常有用。

2\. 列样式的添加:

列样式允许你为特定列应用自定义样式。在这个例子中,我们为 ` FLTYPE `

列添加了按钮样式,使其看起来更像一个可点击的按钮。这为用户提供了一种直观的方式来与列进行交互。

3\. 行样式和单元格样式的添加:

行样式和单元格样式分别允许你为整行或单个单元格应用自定义样式。在这个例子中,我们为第四行添加了一个按钮样式,为第五行添加了热点样式,以及为第六行的 `

COUNTRYFR ` 和 ` COUNTRYTO ` 列添加了按钮和热点样式。这样,你可以更灵活地突出显示报表中的特定信息。

通过这些新功能的添加,你可以更好地满足用户的需求,使报表变得更加交互和易于使用。复选框、列样式、行样式和单元格样式是提高用户体验的关键元素,帮助用户更轻松地操作和理解报表内容。

ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图
ABAPOOALV 样式列行单元格 - 封面图

源码篇幅较长,后台回 复 " **20231116** " 获取

ABAPOOALV 样式列行单元格 - 封面图.textContent = new Date().getFullYear();