ALV002

ALV002
2009-07-30 23:25:44

*&---------------------------------------------------------------------*
*& Report  ZFIVE_001
*&
*&---------------------------------------------------------------------*


REPORT zfive_001 MESSAGE-ID bd no standard page heading.
TYPE-POOLS: icon.
tables:sflight.
TYPES: BEGIN OF st_sflight.
        INCLUDE STRUCTURE sflight.
*       Field for traffic light
TYPES:  traffic_light TYPE c.
*       Field for line color
types:  line_color(4) type c.
TYPES: END OF st_sflight.
CLASS lcl_event_receiver DEFINITION DEFERRED.
TYPES: tt_sflight TYPE STANDARD TABLE OF st_sflight.
DATA: gi_sflight TYPE tt_sflight.


DATA: ok_code LIKE sy-ucomm,
      g_wa_sflight LIKE sflight,
       gs_layout       TYPE lvc_s_layo.

DATA:
  go_grid             TYPE REF TO cl_gui_alv_grid,
  go_custom_container TYPE REF TO cl_gui_custom_container,
  o_event_receiver    TYPE REF TO lcl_event_receiver.
data: g_screen200 LIKE sflight,
* Internal table
     gi_index_rows TYPE lvc_t_row,
* Information about 1 row
     g_selected_row LIKE lvc_s_row.

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
     handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
       IMPORTING
         e_object e_interactive,
     handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
       IMPORTING e_ucomm.
ENDCLASS.                    "lcl_event_receiver DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_toolbar.
*  Event handler method for event toolbar.
    CONSTANTS:
*  Constants for button type
      c_button_normal           TYPE i VALUE 0,
      c_menu_and_default_button TYPE i VALUE 1,
     c_menu                    TYPE i VALUE 2,
      c_separator               TYPE i VALUE 3,
      c_radio_button            TYPE i VALUE 4,
      c_checkbox                TYPE i VALUE 5,
      c_menu_entry              TYPE i VALUE 6.
    DATA:
        ls_toolbar  TYPE stb_button.
*   Append seperator to the normal toolbar
    CLEAR ls_toolbar.
    MOVE c_separator TO ls_toolbar-butn_type..
    APPEND ls_toolbar TO e_object->mt_toolbar.
*   Append a new button that to the toolbar. Use E_OBJECT of
*   event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.
*   This class has one attribute MT_TOOLBAR which is of table type
*   TTB_BUTTON. The structure is STB_BUTTON
    CLEAR ls_toolbar.
    MOVE 'CHANGE'        TO ls_toolbar-function.
    MOVE  icon_change    TO ls_toolbar-icon.
    MOVE 'Change flight' TO ls_toolbar-quickinfo.
    MOVE 'Change'        TO ls_toolbar-text.
    MOVE ' '             TO ls_toolbar-disabled.
    APPEND ls_toolbar    TO e_object->mt_toolbar.
  ENDMETHOD.                    "handle_toolbar
  METHOD handle_user_command.
*   Handle own functions defined in the toolbar
    CASE e_ucomm.
      WHEN 'CHANGE'.
        LEAVE TO SCREEN 0.
    ENDCASE.
  ENDMETHOD.                    "handle_user_command
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

selection-screen: begin of block test.
parameters: dd_k as checkbox.
selection-screen:end of block test..

START-OF-SELECTION.
  SET SCREEN '100'.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '100'.
set titlebar 'S100'.
* Create objects
  IF go_custom_container IS INITIAL.
    CREATE OBJECT go_custom_container
      EXPORTING container_name = 'ALV_CONTAINER'.
    CREATE OBJECT go_grid
      EXPORTING
        i_parent = go_custom_container.
    CREATE OBJECT o_event_receiver.
    SET HANDLER o_event_receiver->handle_user_command FOR go_grid.
    SET HANDLER o_event_receiver->handle_toolbar FOR go_grid.
    PERFORM. load_data_into_grid.
  ENDIF.

ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Form  load_data_into_grid

*&---------------------------------------------------------------------*
FORM. load_data_into_grid.
* Read data from table SFLIGHT
  SELECT *
    FROM sflight
    INTO TABLE gi_sflight.
* Load data into the grid and display them
  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
      i_structure_name = 'SFLIGHT'
    CHANGING
      it_outtab        = gi_sflight.
  CALL METHOD go_grid->set_toolbar_interactive.
  CALL METHOD cl_gui_control=>set_focus
    EXPORTING
      control = go_grid.
ENDFORM.                    " load_data_into_grid

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14397246/viewspace-611028/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14397246/viewspace-611028/

<think>我们正在处理一个关于ABAP ALV设置单元格颜色的问题。根据用户提供的引用和问题,我们需要总结出设置单元格颜色的方法。 根据引用[2]和[3],设置单元格颜色通常需要以下步骤: 1. 在显示ALV的内表结构中添加一个类型为`LVC_T_SCOL`的字段(通常命名为`CELLCOLOR`或`COLOR`)用于存储单元格颜色信息。 2. 在循环内表时,为需要设置颜色的单元格创建颜色结构(类型为`LVC_S_SCOL`),并填充颜色代码(颜色代码由三位组成:COL(颜色代码,1-7),INT(增强颜色,0或1),INV(反转颜色,0或1))。 同时指定要设置颜色的字段名(`FNAME`)。 3. 将颜色结构添加到内表行的颜色字段(即`CELLCOLOR`或`COLOR`)中(这是一个内表,因为一行可能有多个单元格设置颜色)。 4. 在ALV布局中,通过`I_LAYOUT-CELLTAB_FIELDNAME`(或`ctab_fieldname`)指定内表中颜色字段的名称。 另外,引用[4]提到,设置行颜色是通过在数据内表中添加一个4位CHAR类型的字段(例如`COLOR`),然后在布局中指定`INFO_FIELDNAME`(或`info_fname`)为该字段名。但是注意,行颜色和单元格颜色是不同的,行颜色是整行一个颜色,而单元格颜色可以分别设置。 用户问题明确要求设置单元格颜色,所以我们重点在单元格颜色。 步骤详细说明: 1. 定义内表结构,添加颜色字段: 例如: TYPES: BEGIN OF ty_data, matnr TYPE matnr, " 物料 werks TYPE werks_d, " 工厂 labst TYPE labst, " 库存 " ... 其他字段 cellcolor TYPE lvc_t_scol, " 单元格颜色表 END OF ty_data. 2 在循环内表时,为特定单元格添加颜色: LOOP AT gt_data ASSIGNING <fs_data>. IF <fs_data>-labst = 0. " 例如库存为0时,设置物料字段为红色 DATA(ls_color) = VALUE lvc_s_scol( fname = 'MATNR' " 要设置颜色的字段名 color-col = '6' " 红色,颜色代码:1-7,具体查色卡 color-int = 1 " 增强显示 color-inv = 0 " 不反转 nokeycol = 'X' " 忽略关键列颜色(可选) ). APPEND ls_color TO <fs_data>-cellcolor. ENDIF. ENDLOOP. 3 在ALV布局设置中指定单元格颜色字段: DATA: gs_layout TYPE lvc_s_layo. gs_layout-ctab_fname = 'CELLCOLOR'. " 这里填写内表中颜色字段的名称 4 调用ALV显示函数时传入布局。 注意:颜色代码通常使用1到7,具体颜色可能因主题而异,常见的如: 1:灰色,2:蓝色,3:黄色,4:粉红色,5:绿色,6:红色,7:橙色。 另外,引用[3]中有一个例子,设置周转天数字段为红色,当满足条件时。 根据以上步骤,我们可以编写一个示例代码。 下面提供一个完整的示例程序框架:</think>### ABAP ALV 设置单元格颜色的方法 在 ABAP ALV 中设置单元格颜色需要以下步骤: #### 1. **数据结构准备** 在显示 ALV 的内表中添加颜色字段,类型为 `LVC_T_SCOL`(存储单元格颜色表): ```abap TYPES: BEGIN OF ty_data, matnr TYPE matnr, " 物料号 werks TYPE werks_d, " 工厂 labst TYPE labst, " 库存数量 color TYPE lvc_t_scol, " 单元格颜色表(关键字段) END OF ty_data. DATA: gt_data TYPE TABLE OF ty_data. ``` #### 2. **设置颜色逻辑** 在数据处理循环中,通过条件判断为单元格添加颜色: ```abap LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>). IF <fs_data>-labst = 0. " 库存为0时设置颜色 DATA(ls_color) = VALUE lvc_s_scol( fname = 'LABST' " 目标字段名 color-col = '6' " 颜色代码(6=红色) color-int = '1' " 增强显示(1=开启) color-inv = '0' " 不反转颜色 ). APPEND ls_color TO <fs_data>-color. " 添加到颜色表 ENDIF. ENDLOOP. ``` #### 3. **ALV 布局配置** 在布局参数中指定颜色字段名: ```abap DATA(gs_layout) = VALUE lvc_s_layo( ctab_fname = 'COLOR' " 指向内表的颜色字段 zebra = 'X' " 启用斑马纹 col_opt = 'X' " 自动优化列宽 ). ``` #### 4. **ALV 输出** 调用 ALV 函数时传入布局和字段目录: ```abap CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid is_layout_lvc = gs_layout it_fieldcat_lvc = gt_fieldcat " 需提前构建字段目录 TABLES t_outtab = gt_data. ``` #### 📌 关键说明 1. **颜色代码**: - `COL`:基础色值(1=灰, 2=蓝, 3=黄, 4=粉, 5=绿, **6=红**, 7=橙) - `INT=1`:启用高亮增强 - `INV=0`:禁用颜色反转 2. **多单元格控制**: 同一行可向 `COLOR` 字段追加多条记录,实现多单元格染色: ```abap APPEND VALUE #( fname='MATNR' color-col=5 ) TO <fs_data>-color. " 物料号绿色 APPEND VALUE #( fname='WERKS' color-col=3 ) TO <fs_data>-color. " 工厂黄色 ``` 3. **字段名一致性**: `FNAME` 必须匹配字段目录中的字段名(区分大小写)[^2][^3]。 #### 效果示例 | 物料号 | 工厂 | 库存 | |--------|------|------| | M001 | 1001 | <span style="color:red">**0**</span> | <!-- 库存为0时红色 --> | M002 | 1002 | 150 | --- ### 相关问题 1. 如何设置整行背景色(非单元格)? 2. ALV 颜色代码与标准色卡的对应关系是什么? 3. 能否根据动态条件(如用户输入)改变单元格颜色? 4. 如何清除已设置的 ALV 单元格颜色? [^1]: SAP ALV 颜色控制包含行、列、单元格三个层级,需使用不同字段存储颜色信息。 [^2]: 单元格颜色必须通过类型 `LVC_T_SCOL` 的内表字段存储,布局中需用 `CTAB_FNAME` 绑定该字段。 [^3]: 颜色结构 `LVC_S_SCOL` 中的 `FNAME` 需严格匹配目标字段名,否则染色无效。 [^4]: 行颜色控制使用 `INFO_FNAME` + 4 位 CHAR 字段,与单元格染色机制不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值