ABAP ALV颜色设置(行,列,单元格)


关于ALV表格颜色,这种需求在项目中会经常用到。

 

  • 列颜色

列的颜色很简单,在构成ALV字段的FIELDCAT内表中有一个字段是EMPHASIZE,将一个char型4位的颜色代码分配到FIELDCAT内表这个字段即可。

LW_FCAT-EMPHASIZE = 'C710'. "设置字段的颜色
 
MODIFY IT_FIELDCAT FROM LW_FCAT
TRANSPORTING EMPHASIZE
WHERE FIELDNAME = 'ESLRY'.
  • 行颜色

1. 在构成ALV数据的内表中,添加一个char型4位的字段(CLR),用来记录颜色代码

TABLES ZEMP_TEST.

TYPES: BEGIN OF TY_ZEMP.
           INCLUDE STRUCTURE ZEMP_TEST.
TYPES: CLR TYPE CHAR4,"可以控制行颜色
       END OF TY_ZEMP.

DATA: IT_ZEMP TYPE STANDARD TABLE OF TY_ZEMP,
      IW_ZEMP TYPE TY_ZEMP.

  

2. 循环内表,设置颜色代码

LOOP AT IT_ZEMP INTO IW_ZEMP.
     "员工编号为‘3的行,颜色为红色
   IF IW_ZEMP-EMPID = '3'.
       IW_ZEMP-CLR = 'C610'.
       MODIFY IT_ZEMP FROM IW_ZEMP.
        CLEAR IW_ZEMP.
   ENDIF.
ENDLOOP.

  

3. LAYOUT结构中INFO_FIELDNAME的值指定为 CLR

IW_LAYOUT-INFO_FIELDNAME = 'CLR'.  "行颜色代码的字段

  

  • 单元格颜色

单元格颜色的设置与行颜色设计基本一致

1. 在构成ALV数据的内表中,添加一个内表 CellColor,用来记录颜色代码,需要设置颜色的字段名

TYPES: BEGIN OF TY_ZEMP.
       INCLUDE STRUCTURE ZEMP_TEST.
TYPES: CLR TYPE CHAR4,
       CELLCOLOR TYPE LVC_T_SCOL, "单元格颜色
       END OF TY_ZEMP.

 

 

 LOOP AT IT_ZEMP INTO IW_ZEMP.

    "员工编号为‘3’的行,颜色为红色
     IF IW_ZEMP-EMPID = '3'.
       IW_ZEMP-CLR = 'C610'.

       MODIFY IT_ZEMP FROM IW_ZEMP.
       CLEAR IW_ZEMP.

    ENDIF.

    IF IW_ZEMP-EMPID = '2'.
       IW_CELLCOLOR-FNAME = 'ENAME'.
       "员工编号为‘2’的行的‘ENAME’字段颜色为 黄色
       IW_CELLCOLOR-COLOR-COL = 3.
       IW_CELLCOLOR-COLOR-INT = 1.
       IW_CELLCOLOR-COLOR-INV = 0.

       APPEND IW_CELLCOLOR TO IW_ZEMP-CELLCOLOR.
       MODIFY IT_ZEMP FROM IW_ZEMP.
       CLEAR IW_ZEMP.
 
     ENDIF.
 ENDLOOP.

  

 

3. LAYOUT结构中COLTAB_FIELDNAME的值指定为CELLCOLOR

  IW_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "单元格颜色内表字段

最后在调用ALV函数时,设置layout,fieldcat参数

     IS_LAYOUT                         = IW_LAYOUT
     IT_FIELDCAT                       = IT_FIELDCAT
  • ALV工具栏

可以自定义工具栏,或者添加标准ALV工具栏,然后去除一些不需要的功能,这样可以保留标准工具栏的功能

DATA:BEGIN OF TAB OCCURS 0,
       FCODE LIKE RSMPE-FUNC,
      END OF TAB.

   TAB-FCODE = '&OL0'.APPEND TAB.
   TAB-FCODE = '&OAD'.APPEND TAB.
   TAB-FCODE = '&AVE'.APPEND TAB.

 SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'
   EXCLUDING TAB IMMEDIATELY.
  • 求和
LW_FCAT-DO_SUM = 'X'.  "立即求和,只有I,F,P类型的列可以求和

----------------------------------------------------------

 运行效果如下:

ABAPALV颜色设置(行,列,单元格)

在SE38环境下的程序名输入栏输入’DEMO*’后按F4,你可以查到SAP所有的DEMO示例程序,会学到很多ABAP功能的实现方法,

输入’BCALV*’后按F4,你可以查到很多ALV示例程序。

ABAPALV颜色设置(行,列,单元格)
*----------------------------------------------------------------------------------------------------------------------------------、

ABAPALV颜色设置(行,列,单元格)

INCLUDE .
INCLUDE .
  
 TYPE-POOLS slis.
 TABLES spfli.
 
 TYPES: BEGIN OF ty_layout,
         exception(1),
         checkbox,
         icon TYPE icon_d,
         symbol TYPE icon_d,
         color(4),
         cell_color TYPE slis_t_specialcol_alv,
         hyperlink TYPE string,
         link_handle TYPE int4,
        END OF ty_layout.
 TYPES BEGIN OF ty_spfli.
 INCLUDE TYPE ty_layout.
 INCLUDE TYPE spfli.
 TYPES END OF ty_spfli.
 TYPES ty_tab_spfli TYPE ty_spfli OCCURS 0.
 
 PERFORM f_main.
  
 *&---------------------------------------------------------------------*
 *&      Form  f_main
 *&---------------------------------------------------------------------*
 *       ALV display
 *----------------------------------------------------------------------*
  FORM f_main.
   DATA: lt_spfli TYPE ty_tab_spfli,
         lt_fieldcat TYPE slis_t_fieldcat_alv,
         ls_layout TYPE slis_layout_alv,
         lt_hyperlink TYPE lvc_t_hype,
         lt_add_fieldcat TYPE slis_t_add_fieldcat.
PERFORM get_data TABLES lt_spfli. PERFORM set_catalog CHANGING lt_fieldcat. PERFORM set_layout USING ls_layout. PERFORM hyperlink_build TABLES lt_hyperlink. PERFORM add_fieldcat_build TABLES lt_add_fieldcat. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_grid_title = 'Xin''s ALV' it_fieldcat = lt_fieldcat it_hyperlink = lt_hyperlink is_layout = ls_layout it_add_fieldcat = lt_add_fieldcat TABLES t_outtab = lt_spfli. ENDFORM. "f_main *&---------------------------------------------------------------------* *& Form set_layout *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_LAYOUT text *----------------------------------------------------------------------* FORM set_layout USING p_layout TYPE slis_layout_alv. p_layout-zebra = 'X'. p_layout-colwidth_optimize = 'X'. p_layout-window_titlebar = 'LinHuanXin''s ALV Demo'. p_layout-no_hline = 'X'. p_layout-no_vline = 'X'. p_layout-info_fieldname = 'COLOR'. p_layout-coltab_fieldname = 'CELL_COLOR'. p_layout-lights_fieldname = 'EXCEPTION'. ENDFORM. "set_layout *&---------------------------------------------------------------------* *& Form get_data *&---------------------------------------------------------------------* * Get the data for output *----------------------------------------------------------------------* * -->PT_SPFLI data internal table *----------------------------------------------------------------------* FORM get_data TABLES pt_spfli TYPE ty_tab_spfli. DATA: lt_cell TYPE slis_t_specialcol_alv, ls_cell LIKE LINE OF lt_cell, lwa_spfli LIKE LINE OF pt_spfli. SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE pt_spfli. LOOP AT pt_spfli INTO lwa_spfli. IF lwa_spfli-distid = 'KM'. lwa_spfli-color = 'C610'. ENDIF. IF lwa_spfli-distance < 1000. CLEAR ls_cell. REFRESH lt_cell. ls_cell-fieldname = 'DISTANCE'. ls_cell-color-col = '4'. ls_cell-color-int = '1'. ls_cell-color-inv = '0'. ls_cell-nokeycol = 'X'. APPEND ls_cell TO lt_cell. lwa_spfli-cell_color = lt_cell. lwa_spfli-checkbox = 'X'. lwa_spfli-exception = '1'. ELSE. lwa_spfli-exception = '2'. ENDIF. lwa_spfli-link_handle = sy-tabix. lwa_spfli-hyperlink = 'www.163.com'. lwa_spfli-icon = icon_detail. lwa_spfli-symbol = sym_folder. MODIFY pt_spfli FROM lwa_spfli. ENDLOOP. ENDFORM. "get_data *&---------------------------------------------------------------------* *& Form add_fieldcat_build *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->PT_FIELDCAT text *----------------------------------------------------------------------* FORM add_fieldcat_build TABLES pt_fieldcat TYPE slis_t_add_fieldcat. DATA lwa_fieldcat LIKE LINE OF pt_fieldcat. lwa_fieldcat-fieldname = 'HYPERLINK'. lwa_fieldcat-web_field = 'LINK_HANDLE'. APPEND lwa_fieldcat TO pt_fieldcat. ENDFORM. "get_data *&---------------------------------------------------------------------* *& Form hyperlink_build *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->PT_HYPERLINK text *----------------------------------------------------------------------* FORM hyperlink_build TABLES pt_hyperlink TYPE lvc_t_hype. DATA lwa_hyperlink LIKE LINE OF pt_hyperlink. DO 13 TIMES. lwa_hyperlink-handle = sy-index. lwa_hyperlink-href = 'www.sina.com.cn'. APPEND lwa_hyperlink TO pt_hyperlink. ENDDO. DO 13 TIMES. lwa_hyperlink-handle = 13 + sy-index. lwa_hyperlink-href = 'www.163.com'. APPEND lwa_hyperlink TO pt_hyperlink. ENDDO. ENDFORM. "hyperlink_build *&---------------------------------------------------------------------* *& Form set_catalog *&---------------------------------------------------------------------* * set fieldcatalog for alv output *----------------------------------------------------------------------* FORM set_catalog CHANGING pt_fieldcat TYPE slis_t_fieldcat_alv. DATA lwa_fieldcat TYPE slis_fieldcat_alv. "macro DEFINE add_field. clear lwa_fieldcat. lwa_fieldcat-fieldname = &1. lwa_fieldcat-seltext_l = &2. lwa_fieldcat-emphasize = &3. lwa_fieldcat-key = &4. lwa_fieldcat-fix_column = &4. append lwa_fieldcat to pt_fieldcat. END-OF-DEFINITION. "add field catalog add_field 'MANDT' 'Client' '' 'X'. add_field 'CARRID' 'Airline Code' '' 'X'. add_field 'CONNID' 'Fight Number' '' 'X'. add_field 'COUNTRYFR' 'Country From' '' ''. add_field 'CITYFROM' 'City From' '' ''. add_field 'AIRPFROM' 'Airpart From' '' ''.
add_field 'COUNTRYTO' 'Country To' 'C510' ''. add_field 'CITYTO' 'City To' '' ''. add_field 'AIRPTO' 'Airpart To' '' ''. add_field 'FLTIME' 'Fly Time' '' ''. add_field 'DEPTIME' 'Dept Time' '' ''. add_field 'ARRTIME' 'Arrive Time' '' ''. add_field 'DISTANCE' 'Distance' '' ''. add_field 'DISTID' 'Mass unit of distance' '' ''. add_field 'FLTYPE' 'Flight type' '' ''. add_field 'PERIOD' 'Arrival n day(s) later' '' ''. add_field 'HYPERLINK' 'HYPERLINK' '' ''. "checkbox CLEAR lwa_fieldcat. lwa_fieldcat-fieldname = 'CHECKBOX'. lwa_fieldcat-seltext_l = 'Checkbox'. lwa_fieldcat-checkbox = 'X'. lwa_fieldcat-fix_column = 'X'. APPEND lwa_fieldcat TO pt_fieldcat. "icon CLEAR lwa_fieldcat. lwa_fieldcat-fieldname = 'ICON'. lwa_fieldcat-seltext_l = 'Icon'. lwa_fieldcat-icon = 'X'. APPEND lwa_fieldcat TO pt_fieldcat. "symbol CLEAR lwa_fieldcat. lwa_fieldcat-fieldname = 'SYMBOL'. lwa_fieldcat-seltext_l = 'Symbol'.
   lwa_fieldcat-symbol = 'X'.
 
   APPEND lwa_fieldcat TO pt_fieldcat.
 
  
 
 ENDFORM.  

  

BUTN_TYPE                  按钮类型
                                              可用的按钮类型:
                                                 0 Button(normal)
                                                 1 Menu and default button
                                                 2 Menu
                                                 3 分割符
                                                 4 Radio button
                                                 5 Checkbox
                                                 6 Menu entry

 

  

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM