天天看點

DEMO:ALV 行、列、單元格顔色控制

搜東西偶然看到一個不錯的ALV demo

效果

DEMO:ALV 行、列、單元格顔色控制
DEMO:ALV 行、列、單元格顔色控制
DEMO:ALV 行、列、單元格顔色控制
&---------------------------------------------------------------------*
*& Report ZLM_010
*&---------------------------------------------------------------------*
*& http://scn.sap.com/message/1640274#1640274
*&---------------------------------------------------------------------*
REPORT zlm_010.
*REPORT zrich_0002 .
*****************************************************************
* Use of colours in ALV grid (cell, line and column)            *
*****************************************************************
* Table
TABLES : mara.
* Type
TYPES : BEGIN OF ty_mara,          matnr         LIKE mara-matnr,          matkl         LIKE mara-matkl,          counter(4)    TYPE n,          free_text(15) TYPE c,          color_line(4) TYPE c,           " Line color          color_cell    TYPE lvc_t_scol,  " Cell color        END OF ty_mara.
* Structures
DATA  : wa_mara     TYPE ty_mara,        wa_fieldcat TYPE lvc_s_fcat,        is_layout   TYPE lvc_s_layo,        wa_color    TYPE lvc_s_scol.
* Internal table
DATA : it_mara     TYPE STANDARD TABLE OF ty_mara,       it_fieldcat TYPE STANDARD TABLE OF lvc_s_fcat,       it_color    TYPE TABLE          OF lvc_s_scol.
* Variables
DATA : okcode              LIKE sy-ucomm,       w_alv_grid          TYPE REF TO cl_gui_alv_grid,       w_docking_container TYPE REF TO cl_gui_docking_container.
PARAMETERS : p_column AS CHECKBOX,             p_line   AS CHECKBOX,             p_cell   AS CHECKBOX.
AT SELECTION-SCREEN OUTPUT.
  PERFORM get_data.  PERFORM fill_catalog.
  IF w_docking_container IS INITIAL.    PERFORM create_objects.  ENDIF.
*&--------------------------------------------------------------*
*&      Form  create_objects
*&--------------------------------------------------------------*
FORM create_objects.
  CREATE OBJECT w_docking_container
    EXPORTING      ratio                       = 60    EXCEPTIONS      cntl_error                  = 1      cntl_system_error           = 2      create_error                = 3      lifetime_error              = 4      lifetime_dynpro_dynpro_link = 5      OTHERS                      = 6.
  CREATE OBJECT w_alv_grid
    EXPORTING      i_parent = w_docking_container.
* Field that identify color line in internal table  MOVE 'COLOR_LINE' TO is_layout-info_fname.
* Field that identify cell color in inetrnal table  MOVE 'COLOR_CELL' TO is_layout-ctab_fname.
  CALL METHOD w_alv_grid->set_table_for_first_display
    EXPORTING      is_layout                     = is_layout
    CHANGING      it_outtab                     = it_mara
      it_fieldcatalog               = it_fieldcat
    EXCEPTIONS      invalid_parameter_combination = 1      program_error                 = 2      too_many_lines                = 3      OTHERS                        = 4.
ENDFORM.
*&--------------------------------------------------------------*
*&      Form  get_data
*&--------------------------------------------------------------*
FORM get_data.
  SELECT * FROM mara UP TO 5 ROWS.  CLEAR : wa_mara-color_line, wa_mara-color_cell.
  MOVE-CORRESPONDING mara TO wa_mara.  ADD 1                   TO wa_mara-counter.  MOVE 'Blabla'           TO wa_mara-free_text.
  IF wa_mara-counter = '0002'  AND p_line = 'X'.
* Color line    MOVE 'C410' TO wa_mara-color_line.  ELSEIF wa_mara-counter = '0004'  AND p_cell = 'X'.
* Color cell    MOVE 'FREE_TEXT' TO wa_color-fname.    MOVE '6'         TO wa_color-color-col.    MOVE '1'         TO wa_color-color-int.    MOVE '1'         TO wa_color-color-inv.    APPEND wa_color TO it_color.    wa_mara-color_cell[] = it_color[].  ENDIF.
  APPEND wa_mara TO it_mara.
ENDSELECT.
ENDFORM.
*&--------------------------------------------------------------*
*&      Form  fill_catalog
*&--------------------------------------------------------------*
FORM fill_catalog.
*****************************************************************
* Colour code :                                                 *
* Colour is a 4-char field where :                              *
*              - 1st char = C (color property)                  *
*              - 2nd char = color code (from 0 to 7)            *
*                                  0 = background color         *
*                                  1 = blue                     *
*                                  2 = gray                     *
*                                  3 = yellow                   *
*                                  4 = blue/gray                *
*                                  5 = green                    *
*                                  6 = red                      *
*                                  7 = orange                   *
*              - 3rd char = intensified (0=off, 1=on)           *
*              - 4th char = inverse display (0=off, 1=on)       *
*                                                               *
* Colour overwriting priority :                                 *
*   1. Line                                                     *
*   2. Cell                                                     *
*   3. Column                                                   *
*****************************************************************  DATA : w_position TYPE i VALUE '1'.
  CLEAR wa_fieldcat.  MOVE w_position TO wa_fieldcat-col_pos.  MOVE 'MATNR'    TO wa_fieldcat-fieldname.  MOVE 'MARA'     TO wa_fieldcat-ref_table.  MOVE 'MATNR'    TO wa_fieldcat-ref_field.  APPEND wa_fieldcat TO it_fieldcat.
  ADD 1 TO w_position.
  CLEAR wa_fieldcat.  MOVE w_position TO wa_fieldcat-col_pos.  MOVE 'MATKL'    TO wa_fieldcat-fieldname.  MOVE 'MARA'     TO wa_fieldcat-ref_table.  MOVE 'MATKL'    TO wa_fieldcat-ref_field.
* Color column  IF p_column = 'X'.    MOVE 'C610'     TO wa_fieldcat-emphasize.  ENDIF.  APPEND wa_fieldcat TO it_fieldcat.
  ADD 1 TO w_position.
  CLEAR wa_fieldcat.  MOVE w_position TO wa_fieldcat-col_pos.  MOVE 'COUNTER'  TO wa_fieldcat-fieldname.  MOVE 'N'        TO wa_fieldcat-inttype.  MOVE '4'        TO wa_fieldcat-intlen.  MOVE 'Counter'  TO wa_fieldcat-coltext.  APPEND wa_fieldcat TO it_fieldcat.
  ADD 1 TO w_position.
  CLEAR wa_fieldcat.  MOVE w_position  TO wa_fieldcat-col_pos.  MOVE 'FREE_TEXT' TO wa_fieldcat-fieldname.  MOVE 'C'         TO wa_fieldcat-inttype.  MOVE '20'        TO wa_fieldcat-intlen.  MOVE 'Text'      TO wa_fieldcat-coltext.  APPEND wa_fieldcat TO it_fieldcat.
ENDFORM.