`
guanhuaing
  • 浏览: 1189316 次
文章分类
社区版块
存档分类
最新评论

abap--关于在REUSE_ALV_GRID_DISPLAY将单元或行标识不同的颜色的处理收集

 
阅读更多

一、指定行显示不同颜色
参见:http://blog.csdn.net/CompassButton/archive/2006/09/08/1195672.aspx

二、不同列显示不同颜色
1)对于非key字段则可以通过设置字段格式(slis_fieldcat_alv)的emphasize指定,代码如下:
data: wa_fieldcat type slis_fieldcat_alv.
clear wa_fieldcat.
wa_fieldcat-ref_fieldname = im_ref_field.
wa_fieldcat-ref_tabname = im_ref_table.
wa_fieldcat-fieldname = im_fieldname.
wa_fieldcat-tabname = im_tabname.
wa_fieldcat-key = ‘’.
wa_fieldcat-fix_column = IM_fix.
wa_fieldcat-checkbox = im_checkbox.
wa_fieldcat-do_sum = im_dosum.
wa_fieldcat-no_zero = im_zero.
wa_fieldcat-no_out = im_out.
wa_fieldcat-seltext_l = im_seltex_l.
wa_fieldcat-seltext_m = im_seltex_l.
wa_fieldcat-seltext_s = im_seltex_l.
wa_fieldcat-outputlen = im_outputlen.
wa_fieldcat-decimals_out = im_dec.
wa_fieldcat--emphasize = 'C500'.
* wa_fieldcat-col_pos = IM_colpos.
append wa_fieldcat to re_field.
2)对于key字段的设置参见单元颜色设置一个特例(整列的所有单元)

三、指定单元格显示不同颜色(参见红色代码)
代码
report Ztest_fullscreencolor.
type-pools: slis.
class cl_gui_resources definition load.
types: begin of g_ty_s_test,
select_amount type i,
color_rows type i occurs 0,
color_fields_column type lvc_fname occurs 0,
color_fields_cell type lvc_fname occurs 0,
end of g_ty_s_test,

begin of g_ty_s_outtab_slis.
include type alv_t_t2.
*定义颜色设置字段
types: color(4) type c,
tabcolor type slis_t_specialcol_alv,
end of g_ty_s_outtab_slis,
g_ty_t_outtab_slis type table of g_ty_s_outtab_slis.

constants: con_true type char1 value 'X'.

field-symbols: <gt_outtab> type standard table.

data: gs_test type g_ty_s_test,
gt_outtab_slis type g_ty_t_outtab_slis,
g_repid type sy-repid.

data: g_field type lvc_s_fcat-fieldname,
g_int_field type i.
*----------------------------------------------------------------------*
* SELECTION-SCREEN *
*----------------------------------------------------------------------
selection-screen begin of block col with frame title text-col.
parameters:
p_col01 as checkbox.
select-options:
p_colf01 for g_int_field no intervals default 1.
parameters:
p_col02 as checkbox default 'X'.
select-options:
p_colf02 for g_field no intervals default 'CARRID'.
parameters:
p_col03 as checkbox .
select-options:
p_colf03 for g_field no intervals default 'CONNID'.
selection-screen end of block col.

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST *
*----------------------------------------------------------------------*
at selection-screen on value-request for p_colf02-low.
perform f01_f4_fcode changing p_colf02-low.

at selection-screen on value-request for p_colf03-low.
perform f01_f4_fcode changing p_colf03-low.

*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
start-of-selection.
g_repid = sy-repid.

gs_test-select_amount = 30.

if p_col01 eq con_true.
loop at p_colf01.
if not p_colf01-low is initial.
append p_colf01-low to gs_test-color_rows.
endif.
endloop.
endif.
if p_col02 eq con_true.
loop at p_colf02.
if not p_colf02-low is initial.
append p_colf02-low to gs_test-color_fields_column.
endif.
endloop.
endif.
if p_col03 eq con_true.
loop at p_colf03.
if not p_colf03-low is initial.
append p_colf03-low to gs_test-color_fields_cell.
endif.
endloop.
endif.
*----------------------------------------------------------------------*
* END-OF-SELECTION *
*----------------------------------------------------------------------*
end-of-selection.
perform f01_call_fullscreen.

*&---------------------------------------------------------------------*
*& Form f01_call_fullscreen
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form f01_call_fullscreen .
data: ls_layo type slis_layout_alv,
lt_fcat type slis_t_fieldcat_alv.
perform f01_get_outtab.
perform f01_set_layo changing ls_layo.
perform f01_set_fcat changing lt_fcat.
perform f01_set_color changing lt_fcat ls_layo.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = g_repid
*传入控制信息
is_layout = ls_layo
it_fieldcat = lt_fcat
tables
t_outtab = <gt_outtab>
exceptions
program_error = 1
others = 2.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.

endform. " f01_call_fullscreen
*&---------------------------------------------------------------------*
*& Form f01_get_outtab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form f01_get_outtab.
select * from alv_t_t2
into corresponding fields of table gt_outtab_slis
up to gs_test-select_amount rows
order by primary key.

assign gt_outtab_slis to <gt_outtab>.
endform. " f01_get_outtab
*&---------------------------------------------------------------------*
*& Form f01_set_layo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form f01_set_layo changing cs_layo type slis_layout_alv.

data: l_text00 type sy-title,
l_text01 type sy-title,
l_text02 type sy-title,
l_text03 type sy-title.
*... Display options
cs_layo-colwidth_optimize = space.
cs_layo-no_colhead = space.
cs_layo-no_hotspot = space.
cs_layo-zebra = space.
cs_layo-no_vline = space.
cs_layo-no_hline = space.
cs_layo-cell_merge = space.
cs_layo-no_min_linesize = space.
cs_layo-min_linesize = space.
cs_layo-max_linesize = space.
sy-title = 'Test'.
set titlebar 'D0100' with cs_layo-window_titlebar.
cs_layo-no_uline_hs = space.
cs_layo-countfname = space.
*... Exceptions
cs_layo-lights_fieldname = space.
cs_layo-lights_tabname = space.
cs_layo-lights_rollname = space.
cs_layo-lights_condense = space.
*... Sums
cs_layo-no_sumchoice = space.
cs_layo-no_totalline = space.
cs_layo-totals_before_items = space.
cs_layo-totals_only = space.
cs_layo-totals_text = space.
cs_layo-no_subchoice = space.
cs_layo-no_subtotals = space.
cs_layo-subtotals_text = space.
cs_layo-numc_sum = space.
cs_layo-no_unit_splitting = space.
*... Interaction
cs_layo-box_fieldname = space.
cs_layo-box_tabname = space.
cs_layo-box_rollname = space.
cs_layo-expand_fieldname = space.
cs_layo-hotspot_fieldname = space.
cs_layo-no_input = space.
cs_layo-f2code = space.
cs_layo-confirmation_prompt = space.
cs_layo-key_hotspot = space.
cs_layo-flexible_key = space.
cs_layo-reprep = space.
cs_layo-group_buttons = space.
cs_layo-no_keyfix = space.
cs_layo-get_selinfos = space.
cs_layo-group_change_edit = space.
cs_layo-no_scrolling = space.
cs_layo-expand_all = space.
cs_layo-no_author = space.
*... Detailed screen
cs_layo-detail_popup = space.
cs_layo-detail_initial_lines = space.
cs_layo-detail_titlebar = space.
*... PF-status
cs_layo-def_status = space.
*... Display variants
cs_layo-header_text = space.
cs_layo-item_text = space.
cs_layo-default_item = space.
*... colour
cs_layo-info_fieldname = space.
cs_layo-coltab_fieldname = space.
*... others
cs_layo-list_append = space.
endform. " f01_set_layo

*&---------------------------------------------------------------------*
*& Form f01_set_fcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form f01_set_fcat changing ct_fcat type slis_t_fieldcat_alv.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_structure_name = 'ALV_T_T2'
changing
ct_fieldcat = ct_fcat
exceptions
inconsistent_interface = 1
program_error = 2
others = 3.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
endform. " f01_set_fcat

*&---------------------------------------------------------------------*
*& Form f01_set_color
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form f01_set_color changing ct_fcat type slis_t_fieldcat_alv
cs_layo type slis_layout_alv.
field-symbols: <ls_outtab> type any,
<ls_fcat> type slis_fieldcat_alv,
<l_any> type any,
<lt_table> type standard table.
data: l_row type i,
l_field type lvc_fname,
l_color_index type i,
lt_fcat type slis_t_fieldcat_alv,
lt_color_lvc type lvc_t_scol,
ls_color_lvc type lvc_s_scol,
lt_color_slis type slis_t_specialcol_alv,
ls_color_slis type slis_specialcol_alv.
*Set Row Color through info_fieldname
*对不同行对Color字段填写不同颜色值

cs_layo-info_fieldname = 'COLOR'.
loop at gs_test-color_rows into l_row.
read table <gt_outtab> assigning <ls_outtab> index l_row.
if sy-subrc eq 0.
assign component 'COLOR' of structure <ls_outtab> to <l_any>.
if sy-subrc eq 0.
<l_any> = 'C610'.
endif.
endif.
endloop.
lt_fcat = ct_fcat.
delete lt_fcat where tech ne space or no_out ne space.
*对于非关键字段可以通过emphasize设置颜色
loop at gs_test-color_fields_column into l_field.
read table lt_fcat assigning <ls_fcat>
with key fieldname = l_field.
if sy-subrc eq 0 and <ls_fcat>-key eq space.
read table ct_fcat assigning <ls_fcat>
with key fieldname = <ls_fcat>-fieldname.
if sy-subrc eq 0.
<ls_fcat>-emphasize = 'C500'.
endif.
else.
*对于关键字段可以通过则通过cs_layo-coltab_fieldname = 'TABCOLOR'来设置颜色
ls_color_slis-fieldname = <ls_fcat>-fieldname.
ls_color_slis-color-col = cl_gui_resources=>list_col_positive.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
append ls_color_slis to lt_color_slis.
loop at <gt_outtab> assigning <ls_outtab>.
assign component 'TABCOLOR' of structure <ls_outtab> to <l_any>.
if sy-subrc eq 0.
<l_any> = lt_color_slis.
endif.
endloop.
endif.
endloop.

cs_layo-coltab_fieldname = 'TABCOLOR'.
*TABCOLOR表可以填写多条,也就可以同行控制多个单元的颜色。
loop at <gt_outtab> assigning <ls_outtab>.
add 1 to l_color_index.
clear lt_color_slis.
case l_color_index.
when 1.
ls_color_slis-color-col = cl_gui_resources=>list_col_background.
ls_color_slis-color-int = 0.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 2.
ls_color_slis-color-col = cl_gui_resources=>list_col_background.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 3.
ls_color_slis-color-col = cl_gui_resources=>list_col_heading.
ls_color_slis-color-int = 0.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 4.
ls_color_slis-color-col = cl_gui_resources=>list_col_heading.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 5.
ls_color_slis-color-col = cl_gui_resources=>list_col_normal.
ls_color_slis-color-int = 0.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 6.
ls_color_slis-color-col = cl_gui_resources=>list_col_normal.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 7.
ls_color_slis-color-col = cl_gui_resources=>list_col_total.
ls_color_slis-color-int = 0.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 8.
ls_color_slis-color-col = cl_gui_resources=>list_col_total.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 9.
ls_color_slis-color-col = cl_gui_resources=>list_col_key.
ls_color_slis-color-int = 0.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 10.
ls_color_slis-color-col = cl_gui_resources=>list_col_key.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 11.
ls_color_slis-color-col = cl_gui_resources=>list_col_positive.
ls_color_slis-color-int = 0.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 12.
ls_color_slis-color-col = cl_gui_resources=>list_col_positive.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 13.
ls_color_slis-color-col = cl_gui_resources=>list_col_negative.
ls_color_slis-color-int = 0.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 14.
ls_color_slis-color-col = cl_gui_resources=>list_col_negative.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 15.
ls_color_slis-color-col = cl_gui_resources=>list_col_group.
ls_color_slis-color-int = 0.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
when 16.
ls_color_slis-color-col = cl_gui_resources=>list_col_group.
ls_color_slis-color-int = cl_gui_resources=>list_intensified.
ls_color_slis-color-inv = 0.
ls_color_slis-nokeycol = con_true.
clear l_color_index.
endcase.
*查找同行多少列需要设置颜色,则生成多条颜色纪录
loop at gs_test-color_fields_cell into l_field.
read table lt_fcat assigning <ls_fcat>
with key fieldname = l_field.
if sy-subrc eq 0.
ls_color_slis-fieldname = <ls_fcat>-fieldname.
append ls_color_slis to lt_color_slis.
endif.
endloop.
*将颜色纪录添加到数据输出表的TABCOLOR字段
assign component 'TABCOLOR' of structure <ls_outtab> to <lt_table>.
if sy-subrc eq 0.
append lines of lt_color_slis to <lt_table>.
endif.
endloop.
endform. " f01_set_color
*&---------------------------------------------------------------------*
*& Form f01_f4_fcode
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form f01_f4_fcode changing c_value type lvc_s_fcat-fieldname.

data: lt_fcat type slis_t_fieldcat_alv,
ls_fcat type slis_fieldcat_alv.
data: lt_values type table of seahlpres,
lt_fields type table of dfies,
lt_return type table of ddshretval,
ls_value type seahlpres,
ls_field type dfies,
ls_return type ddshretval.
perform f01_set_fcat changing lt_fcat.
clear ls_field.
ls_field-fieldname = 'FIELDNAME'.
ls_field-intlen = 30.
ls_field-leng = 30.
ls_field-outputlen = 30.
ls_field-scrtext_s = ls_field-fieldname.
ls_field-scrtext_m = ls_field-fieldname.
ls_field-scrtext_l = ls_field-fieldname.
ls_field-reptext = ls_field-fieldname.
append ls_field to lt_fields.
loop at lt_fcat into ls_fcat where tech eq space.
ls_value-string = ls_fcat-fieldname.
append ls_value to lt_values.
endloop.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
retfield = 'FIELDNAME'
display = space
tables
value_tab = lt_values
field_tab = lt_fields
return_tab = lt_return
exceptions
parameter_error = 1
no_values_found = 2
others = 3.
if sy-subrc <> 0 and sy-subrc ne 3.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
read table lt_return into ls_return with key fieldname = 'FIELDNAME'.
if sy-subrc eq 0.
c_value = ls_return-fieldval.
endif.
endform. " f01_f4_fcode

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics