ALV 셀별 스타일 지정
DATA : LT_CELLTAB TYPE LVC_T_STYL,
LS_CELLTAB TYPE LVC_S_STYL.
" 버튼 스타일
CLEAR : LS_CELLTAB.
LS_CELLTAB-FIELDNAME = 'DETAIL'.
LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
" LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND LS_CELLTAB TO LT_CELLTAB.
LOOP AT GT_OTAB.
GT_OTAB-DETAIL = ICON_HISTORY.
CLEAR : GT_OTAB-CELLS, GT_OTAB-CELLS[].
INSERT LINES OF LT_CELLTAB_BTN INTO TABLE GT_OTAB-CELLS.
MODIFY GT_OTAB.
ENDLOOP.
ALV 세팅시 레이아웃에 다음과같이 CELL STYLE 필드를 지정해준다.
PS_LAYOUT-STYLEFNAME = 'CELLS'.
필드 카달록으로 컬럼 전체가 아니라 데이터 확인후 셀별로 스타일 지정할때는 위와 같이 사용한다. CL_BUI_ALV_GRID 클래스에 각각의 다음과 같은 스타일이 정의 되어 있으니 참고.
MC_STYLE4_LINK | Set Link Style | '00000004' |
MC_STYLE4_LINK_NO | Remove Link Style | '00000008' |
MC_STYLE_BUTTON | Button | '20000000' |
MC_STYLE_DISABLED | Not Ready for Input | '00100000' |
MC_STYLE_ENABLED | Ready for Input | '00080000' |
MC_STYLE_F4 | F4 | '02000000' |
MC_STYLE_F4_NO | No F4 | '04000000' |
MC_STYLE_HOTSPOT | Hotspot | '00200000' |
MC_STYLE_HOTSPOT_NO | Disable Hotspot | '00400000' |
MC_STYLE_NO_DELETE_ROW | Delete Rows not Enabled | '10000000' |
값을 직접 입력하든 그건 니 맘.
아래와 같이 FIELD CATALOG에서 스타일을 지정하면 셀별 스타일은 무시되는 것 같음(?).
GS_FCAT1_LN-COL_POS = 13.
GS_FCAT1_LN-FIELDNAME = 'DETAIL'.
GS_FCAT1_LN-COLTEXT = '변경이력'(018).
GS_FCAT1_LN-OUTPUTLEN = 13.
GS_FCAT1_LN-DATATYPE = 'CHAR'.
GS_FCAT1_LN-JUST = 'C'.
"GS_FCAT1_LN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
APPEND GS_FCAT1_LN TO GT_FCAT1.