01 功能说明
本系列将通过模拟用户与开发者之间的对话场景,来逐步演示SALV的使用。在本篇中,我们将延续前文内容,解决用户最新提出的需求。
今天我们将探讨SALV模型中如何添加单元格样式?相信通过实际操作,你能迅速理解和掌握这些知识点。让我们一起动手尝试一下,看看如何实现这些功能吧!
02 功能效果
第19天 用户说:单元格样式
添加复选列方便选择,按需设置单元格样式。
"列样式(checkbox hotspot)
lo_columns->set_column_position( columnname = 'CBOX' position = 1 ).
lo_column ?= lo_columns->get_column( columnname = 'CBOX' ).
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->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
"行、单元格样式
DATA ls_ctyp TYPE salv_s_int4_column.
lo_columns->set_cell_type_column( 'CTYP' ).
LOOP AT gt_spfli INTO gs_spfli.
CASE sy-tabix.
WHEN 4.
"行样式(button)
CLEAR ls_ctyp.
ls_ctyp-columnname = ''.
ls_ctyp-value = if_salv_c_cell_type=>button.
APPEND ls_ctyp TO gs_spfli-ctyp.
WHEN 5.
"行样式(hotspot)
CLEAR ls_ctyp.
ls_ctyp-columnname = ''.
ls_ctyp-value = if_salv_c_cell_type=>hotspot.
APPEND ls_ctyp TO gs_spfli-ctyp.
WHEN 6.
"单元格样式(button + hotspot)
CLEAR ls_ctyp.
ls_ctyp-columnname = 'COUNTRYFR'.
ls_ctyp-value = if_salv_c_cell_type=>button.
APPEND ls_ctyp TO gs_spfli-ctyp.
CLEAR ls_ctyp.
ls_ctyp-columnname = 'COUNTRYTO'.
ls_ctyp-value = if_salv_c_cell_type=>hotspot.
APPEND ls_ctyp TO gs_spfli-ctyp.
WHEN OTHERS.
ENDCASE.
MODIFY gt_spfli FROM gs_spfli.
ENDLOOP.
03 源码分享
TYPES:
BEGIN OF gty_spfli_incl,
cbox TYPE c,
ctyp TYPE salv_t_int4_column,
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.
START-OF-SELECTION.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF 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 ).
*------------------------------------*
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' ).
*------------------------------------*
DATA lo_functions TYPE REF TO cl_salv_functions.
lo_functions = go_salv->get_functions( ).
lo_functions->set_all( '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' ).
"列样式(checkbox hotspot)
lo_columns->set_column_position( columnname = 'CBOX' position = 1 ).
lo_column ?= lo_columns->get_column( columnname = 'CBOX' ).
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->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
"行、单元格样式
DATA ls_ctyp TYPE salv_s_int4_column.
lo_columns->set_cell_type_column( 'CTYP' ).
LOOP AT gt_spfli INTO gs_spfli.
CASE sy-tabix.
WHEN 4.
"行样式(button)
CLEAR ls_ctyp.
ls_ctyp-columnname = ''.
ls_ctyp-value = if_salv_c_cell_type=>button.
APPEND ls_ctyp TO gs_spfli-ctyp.
WHEN 5.
"行样式(hotspot)
CLEAR ls_ctyp.
ls_ctyp-columnname = ''.
ls_ctyp-value = if_salv_c_cell_type=>hotspot.
APPEND ls_ctyp TO gs_spfli-ctyp.
WHEN 6.
"单元格样式(button + hotspot)
CLEAR ls_ctyp.
ls_ctyp-columnname = 'COUNTRYFR'.
ls_ctyp-value = if_salv_c_cell_type=>button.
APPEND ls_ctyp TO gs_spfli-ctyp.
CLEAR ls_ctyp.
ls_ctyp-columnname = 'COUNTRYTO'.
ls_ctyp-value = if_salv_c_cell_type=>hotspot.
APPEND ls_ctyp TO gs_spfli-ctyp.
WHEN OTHERS.
ENDCASE.
MODIFY gt_spfli FROM gs_spfli.
ENDLOOP.
*------------------------------------*
go_salv->display( ).
小贴士:
- 可使用BC_DATA_GEN生成数据,以便查看演示效果;
- 以上纯属个人总结,如有纰漏请联系我;
以上是今日分享,希望对你有所帮助~~
04 关注我
更多干货请扫码关注微信公众号:ABAP猿