# ABAP SALV-隐藏列、修改列标题、添加图标列、调整列位置
原创 猿ABAP [ ABAP猿 ](javascript:void\(0\);)
__ _ _ _ _
点击上方 蓝字 关注我们
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控制对象来实现更多功 能。接
下来,我们将探讨 ** 如何隐藏列、修改列标题、添加图标列以及 调整列位置 ** 。
赶紧动手试一试 ,以便更好地掌握这些新的知识点。
第 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 .第 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 .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' .
BEGIN OF gty_spfli_incl ,
snum TYPE i ,
icon TYPE icon_d ,
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 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_salvCHANGING
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生成数据,以便查看演示效果;
• 以上纯属个人总结,如有纰漏请联系我,谢谢;
以上是今日分享,希望对你有所帮助~~~
欢迎点赞、留言、分享
.textContent = new Date().getFullYear();