ABAPSALV 隐藏列修改列标题添加图标列调整列位置

作者:ABAP猿 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
目录
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图

# ABAP SALV-隐藏列、修改列标题、添加图标列、调整列位置

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

__ _ _ _ _

ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图

点击上方 蓝字 关注我们

ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图

We are going forward to the future, not back into the past.

我们要迈向未来,而不是沉湎于过去。

功能说明

上篇: [ ABAP SALV-选择模式、触发事件

](http://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247493599&idx=1&sn=646dad86bd6eebe55dde0e7e21378c1b&chksm=cf0a3331f87dba27b8113eb06f62127c18e98e889e1366269e86e7201367458e94f22fe6c6e5&scene=21#wechat_redirect)

本系列将通过模拟用户与开发者之间的对话场景, 来逐步演示SALV的使用。在本篇中,我们将延续前文内容,解决用户最新提出的需求。

如果你已经 完成了前13步 ,那么你对整个SALV模型的功能应该有了全面的了解,这将为后续 的学习 和操 作 带 来 便利。细

心的小伙伴可能已经 注意到,我在每 一步代码下都留下了 **省略号** ,这意味着除了已实现的功能外,我们还可以通过ALV控制对象来实现更多功 能。接

下来,我们将探讨 ** 如何隐藏列、修改列标题、添加图标列以及 调整列位置 ** 。

赶紧动手试一试 ,以便更好地掌握这些新的知识点。

功能效果

ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图

第 14 天 用户说

不显示集团列,起飞国家、到达国家列标题调整。

IF p_day14 = 'X' .

"列不可见、不可用

lo_column ?= lo_columns -> get_column ( columnname = 'MANDT' ).

lo_column -> set_visible ( 'X' ). "不可见

lo_column -> set_technical ( 'X' ). "技术列(布局也不可见)

"列标题修改

lo_column ?= lo_columns -> get_column ( columnname = 'COUNTRYFR' ).

lo_column -> set_short_text ( '起飞国家' ).

lo_column -> set_medium_text ( '起飞国家' ).

lo_column -> set_long_text ( '起飞国家' ).

lo_column ?= lo_columns -> get_column ( columnname = 'COUNTRYTO' ).

lo_column -> set_short_text ( '到达国家' ).

lo_column -> set_medium_text ( '到达国家' ).

lo_column -> set_long_text ( '到达国家' ).

ENDIF .
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图

第 15 天 用户说

新增序号列、图标列,要求:居中显示,并调整到第头2列进行显示。

IF p_day15 = 'X' .

"调整列位置

lo_columns -> set_column_position ( columnname = 'SNUM' position = 1

).

lo_columns -> set_column_position ( columnname = 'ICON' position = 2

).

"取消关键列

lo_column ?= lo_columns -> get_column ( columnname = 'CARRID' ).

lo_column -> set_key ( '' ).

lo_column ?= lo_columns -> get_column ( columnname = 'CONNID' ).

lo_column -> set_key ( '' ).

lo_column ?= lo_columns -> get_column ( columnname = 'SNUM' ).

lo_column -> set_short_text ( '序号' ).

lo_column -> set_medium_text ( '序号' ).

lo_column -> set_long_text ( '序号' ).

lo_column -> set_alignment ( if_salv_c_alignment => centered ).
lo_column ?= lo_columns -> get_column ( columnname = 'ICON' ).

lo_column -> set_short_text ( '图标' ).

lo_column -> set_medium_text ( '图标' ).

lo_column -> set_long_text ( '图标' ).

lo_column -> set_icon ( 'X' ).

lo_column -> set_alignment ( if_salv_c_alignment => centered ).
LOOP AT gt_spfli INTO gs_spfli .

gs_spfli \- snum = sy \- tabix .

CASE sy \- tabix .

WHEN 1 .

gs_spfli \- icon = '@5B@' .

WHEN 2 .

gs_spfli \- icon = '@5C@' .

WHEN 3 .

gs_spfli \- icon = '@5D@' .

WHEN OTHERS .

ENDCASE . MODIFY gt_spfli FROM gs_spfli . ENDLOOP . ENDIF .
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图
ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图

源码分享

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1 . SELECTION-SCREEN BEGIN OF LINE . SELECTION-SCREEN COMMENT 01 ( 54 ) day01 . SELECTION-SCREEN COMMENT 59 ( 54 ) day14 . SELECTION-SCREEN END OF LINE . SELECTION-SCREEN BEGIN OF LINE . SELECTION-SCREEN COMMENT 01 ( 54 ) day02 . SELECTION-SCREEN COMMENT 59 ( 54 ) day15 . SELECTION-SCREEN END OF LINE . SELECTION-SCREEN BEGIN OF LINE . SELECTION-SCREEN COMMENT 1 ( 54 ) day03 . SELECTION-SCREEN END OF LINE .

...

SELECTION-SCREEN END OF BLOCK b1 .
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2 . SELECTION-SCREEN BEGIN OF LINE .

PARAMETERS p_day01 AS CHECKBOX DEFAULT 'X' . "01、基本展示

SELECTION-SCREEN COMMENT 03 ( 54 ) c01 FOR FIELD p_day01 .

PARAMETERS p_day14 AS CHECKBOX DEFAULT 'X' . "14、功能:隐藏列、修改列标题

SELECTION-SCREEN COMMENT 59 ( 54 ) c14 FOR FIELD p_day14 . SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .

PARAMETERS p_day02 AS CHECKBOX DEFAULT 'X' . "02、外观设置

SELECTION-SCREEN COMMENT 03 ( 54 ) c02 FOR FIELD p_day02 .

PARAMETERS p_day15 AS CHECKBOX DEFAULT 'X' . "15、功能:调整列位置、图标列

SELECTION-SCREEN COMMENT 59 ( 54 ) c15 FOR FIELD p_day15 . SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .

PARAMETERS p_day03 AS CHECKBOX DEFAULT 'X' . "03、列设置

SELECTION-SCREEN COMMENT 03 ( 54 ) c03 FOR FIELD p_day03 . SELECTION-SCREEN END OF LINE .

...

SELECTION-SCREEN END OF BLOCK b2 .

INITIALIZATION .

sy \- title = 'ABAP SALV演示程序-公众号(ABAP猿)' .

t1 = '用户说' .

t2 = '你来做' .

day01 = '01、从表SPFLI获取数据,并进行基本展示。' .

day02 = '02、能否修改下抬头标题文本,并斑马纹展示?' .

day03 = '03、能否优化下列宽?' .

...

day14 = '14、不显示集团列,起飞国家、到达国家列标题调整。' .

day15 = '15、新增序号列、图标列,要求:居中显示,并调整到第头2列进行显示。' .

c01 = '01、基本展示' .

c02 = '02、外观设置' .

c03 = '03、列设置' .

...

c14 = '14、功能:隐藏列、修改列标题' .

c15 = '15、功能:调整列位置、图标列' .

START-OF-SELECTION .

*------------------------------------*

CHECK p_day01 EQ 'X' .

TYPES

BEGIN OF gty_spfli_incl ,

snum TYPE i ,

icon TYPE icon_d ,

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 gt_spfli TYPE TABLE OF spfli.

SELECT * FROM spfli INTO TABLE gt_spfli UP TO 30 ROWS .

DATA go_salv TYPE REF TO cl_salv_table .

cl_salv_table => factory (

IMPORTING

r_salv_table = go_salv

CHANGING

t_table = gt_spfli ).

...

*------------------------------------*

IF p_day02 EQ 'X' .

DATA lo_display TYPE REF TO cl_salv_display_settings .

lo_display = go_salv -> get_display_settings ( ).

lo_display -> set_list_header ( 'ABAP SALV演示程序-公众号(ABAP猿)' ).

lo_display -> set_striped_pattern ( 'X' ).

...

ENDIF .

*------------------------------------*

IF p_day03 EQ 'X' .

DATA lo_columns TYPE REF TO cl_salv_columns_table .

DATA lo_column TYPE REF TO cl_salv_column_table .

lo_columns = go_salv -> get_columns ( ).

lo_columns -> set_optimize ( 'X' ).

...

IF p_day14 = 'X' .

"列不可见、不可用

lo_column ?= lo_columns -> get_column ( columnname = 'MANDT' ).

lo_column -> set_visible ( 'X' ). "不可见

lo_column -> set_technical ( 'X' ). "技术列(布局也不可见)

"列标题修改

lo_column ?= lo_columns -> get_column ( columnname = 'COUNTRYFR' ).

lo_column -> set_short_text ( '起飞国家' ).

lo_column -> set_medium_text ( '起飞国家' ).

lo_column -> set_long_text ( '起飞国家' ).

lo_column ?= lo_columns -> get_column ( columnname = 'COUNTRYTO' ).

lo_column -> set_short_text ( '到达国家' ).

lo_column -> set_medium_text ( '到达国家' ).

lo_column -> set_long_text ( '到达国家' ).

ENDIF .
IF p_day15 = 'X' .

"调整列位置

lo_columns -> set_column_position ( columnname = 'SNUM' position = 1

).

lo_columns -> set_column_position ( columnname = 'ICON' position = 2

).

"取消关键列

lo_column ?= lo_columns -> get_column ( columnname = 'CARRID' ).

lo_column -> set_key ( '' ).

lo_column ?= lo_columns -> get_column ( columnname = 'CONNID' ).

lo_column -> set_key ( '' ).

lo_column ?= lo_columns -> get_column ( columnname = 'SNUM' ).

lo_column -> set_short_text ( '序号' ).

lo_column -> set_medium_text ( '序号' ).

lo_column -> set_long_text ( '序号' ).

lo_column -> set_alignment ( if_salv_c_alignment => centered ).
lo_column ?= lo_columns -> get_column ( columnname = 'ICON' ).

lo_column -> set_short_text ( '图标' ).

lo_column -> set_medium_text ( '图标' ).

lo_column -> set_long_text ( '图标' ).

lo_column -> set_icon ( 'X' ).

lo_column -> set_alignment ( if_salv_c_alignment => centered ).
LOOP AT gt_spfli INTO gs_spfli .

gs_spfli \- snum = sy \- tabix .

CASE sy \- tabix .

WHEN 1 .

gs_spfli \- icon = '@5B@' .

WHEN 2 .

gs_spfli \- icon = '@5C@' .

WHEN 3 .

gs_spfli \- icon = '@5D@' .

WHEN OTHERS .

ENDCASE . MODIFY gt_spfli FROM gs_spfli . ENDLOOP . ENDIF . ENDIF .

*------------------------------------*

...

*------------------------------------*

go_salv -> display ( ).

• * *

**小贴士:**

• **** 可使用BC_DATA_GEN生成数据,以便查看演示效果;

• 以上纯属个人总结,如有纰漏请联系我,谢谢;

以上是今日分享,希望对你有所帮助~~~

欢迎点赞、留言、分享

ABAPSALV 隐藏列修改列标题添加图标列调整列位置 - 封面图.textContent = new Date().getFullYear();