效果: carrid 列的第二行 设置为热键,

CONNID 第三行设置为button ​ALV <wbr>demo:cl_salv_table(Apply <wbr>Styles <wbr>to <wbr>Cell)



code: *&---------------------------------------------------------------------*


*& Report  ZLM_ALV_009


*&


*&---------------------------------------------------------------------*


*&


*&


*&---------------------------------------------------------------------*



REPORT zlm_alv_009 .


*


CLASS lcl_report  DEFINITION .


*

 

  PUBLIC  SECTION .



 

      TYPES  :  BEGIN  OF spfli_struc .

 

                      INCLUDE    TYPE spfli .

 

      TYPES  : i_celltype  TYPE salv_t_int4_column ,

 

                      END  OF spfli_struc .



 

      DATA : gt_spfli  TYPE  STANDARD  TABLE  OF spfli_struc .



*   ALV reference

 

      DATA : o_alv  TYPE  REF  TO cl_salv_table .


 

      METHODS :

 

          get_data ,            "  data selection

 

          generate_output .     "  Generating output


*

 

  PRIVATE  SECTION .

 

      METHODS :

 

          set_columns .         "  Set columns


ENDCLASS .                     "lcl_report DEFINITION


*


*


START-OF-SELECTION .

 

  DATA : lo_report  TYPE  REF  TO lcl_report .


*

 

  CREATE OBJECT  lo_report .

 

  lo_report ->get_data (  ) .

 

  lo_report ->generate_output (  ) .




*


CLASS lcl_report  IMPLEMENTATION .


*

 

  METHOD get_data .


*   data selection

 

      SELECT *

 

                    FROM spfli

 

                    INTO CORRESPONDING  FIELDS  OF  TABLE gt_spfli .



 

      FIELD-SYMBOLS : 《lfs_spfli》  LIKE  LINE  OF gt_spfli .

 

      DATA : lt_celltype  TYPE salv_t_int4_column .

 

      DATA : ls_celltype  LIKE  LINE  OF lt_celltype .

 

      LOOP  AT gt_spfli  ASSIGNING 《lfs_spfli》 .

 

          CLEAR : lt_celltype .


* Only CARRID for 2nd record

 

          IF sy -tabix  =  2 .

 

              ls_celltype -columnname  =  'CARRID' .

 

              ls_celltype - value       = if_salv_c_cell_type => hotspot .

 

              APPEND ls_celltype  TO lt_celltype .


* Only CONNID for 3rd record

 

          ELSEIF sy -tabix  =  3 .

 

              ls_celltype -columnname  =  'CONNID' .

 

              ls_celltype - value       = if_salv_c_cell_type =>button .

 

              APPEND ls_celltype  TO lt_celltype .


* Entire 5th record

 

          ELSEIF sy -tabix  =  5 .

 

              ls_celltype -columnname  =  ".

 

              ls_celltype - value       = if_salv_c_cell_type => hotspot .

 

              APPEND ls_celltype  TO lt_celltype .

 

          ENDIF .

 

          《lfs_spfli》 -i_celltype  = lt_celltype .

 

      ENDLOOP .


 

  ENDMETHOD .                     "get_data


*

 

  METHOD generate_output .


* New ALV instance

 

      DATA : lx_msg  TYPE  REF  TO cx_salv_msg .

 

      TRY .

 

              cl_salv_table =>factory (

 

                  IMPORTING

 

                      r_salv_table  = o_alv

 

                  CHANGING

 

                      t_table            = gt_spfli  ) .

 

          CATCH cx_salv_msg  INTO lx_msg .

 

      ENDTRY .


*


* Setting up the Columns

 

      me ->set_columns (  ) .



* Displaying the ALV

 

      o_alv ->display (  ) .


 

  ENDMETHOD .                     "generate_output


*

 

  METHOD set_columns .


*


*...Get all the Columns

 

      DATA : lo_cols  TYPE  REF  TO cl_salv_columns_table .

 

      lo_cols  = o_alv ->get_columns (  ) .


*


*   set the Column optimization

 

      lo_cols ->set_optimize (  'X'  ) .



*   Set the Cell Type

 

      TRY .

 

              lo_cols ->set_cell_type_column (  'I_CELLTYPE'  ) .

 

          CATCH cx_salv_data_error .                          "#EC NO_HANDLER

 

      ENDTRY .


 

  ENDMETHOD .                     "SET_COLUMNS



*


*


ENDCLASS .                     "lcl_report IMPLEMENTATION