This report illustrates how to set chosen cells of an ALV Grid Control editable. Below are the essential steps undertaken:
1.Extend your output table for a field, e.g., CELLTAB, that holds information about the edit status of each cell for the corresponding row (the table type is SORTED!).
2. After selecting data, set edit status for each row in a loop according to field SEATSMAX.
a.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_ENABLED to set a cell to status "editable".
b.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_DISABLED to set a cell to status "non-editable".
c.Copy your celltab to the celltab of the current row of gt_outtab.
3.Provide the fieldname of the celltab field by using field STYLEFNAME of the layout structure.
Sample Code:
data: ok_code like sy-ucomm,
save_ok like sy-ucomm,
g_container type scrfname value 'BCALV_GRID_DEMO_0100_CONT1',
grid1 type ref to cl_gui_alv_grid,
g_custom_container type ref to cl_gui_custom_container,
gs_layout type lvc_s_layo.
* g_max type i value 500.
*§1.Extend your output table for a field, e.g., CELLTAB, that holds
* information about the edit status of each cell for the
* corresponding row (the table type is SORTED!).
data: begin of gt_outtab occurs 0, "with header line
count type int2.
include structure sflight.
data: celltab type lvc_t_styl.
data: end of gt_outtab.
data: gs_fieldcat type lvc_s_fcat,
gt_fieldcat type lvc_t_fcat.
parameters: g_max type i default '600',
g_rstyle type char1 as checkbox,
g_rowins type char1 as checkbox. "default 'X'. "key active
*---------------------------------------------------------------------*
* MAIN *
*---------------------------------------------------------------------*
call screen 100.
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
module pbo output.
set pf-status 'MAIN100'.
set titlebar 'MAIN100'.
if g_custom_container is initial.
create object g_custom_container
exporting
container_name = g_container.
create object grid1
exporting
i_parent = g_custom_container.
* select data, set styles
perform select_data_and_init_style.
*§3.Provide the fieldname of the celltab field by using field
* STYLEFNAME of the layout structure.
gs_layout-stylefname = 'CELLTAB'.
gs_layout-sel_mode = 'D'.
* short key 'Delete row' active?
if g_rowins is not initial.
gs_layout-no_rowins = 'X'. "not allowed
endif.
* fieldcat
perform set_fieldcat using gt_fieldcat.
call method grid1->set_table_for_first_display
exporting "i_structure_name = 'SFLIGHT'
is_layout = gs_layout
changing
it_outtab = gt_outtab[]
it_fieldcatalog = gt_fieldcat.
endif.
endmodule.
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
module pai input.
save_ok = ok_code.
clear ok_code.
case save_ok.
when 'EXIT'.
perform exit_program.
when 'SWITCH'.
perform switch_edit_mode.
when others.
* do nothing
endcase.
endmodule.
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
form exit_program.
set screen 0.
leave screen.
endform.
*&---------------------------------------------------------------------*
*& Form SELECT_DATA_AND_INIT_STYLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form select_data_and_init_style.
data: lt_sflight type table of sflight with header line,
lt_celltab type lvc_t_styl,
l_index type i.
select * from sflight into table lt_sflight up to g_max rows.
* move corresponding fields from lt_sflight to gt_outtab
loop at lt_sflight.
move-corresponding lt_sflight to gt_outtab.
append gt_outtab.
endloop.
*§2.After selecting data, set edit status for each row in a loop
* according to field SEATSMAX.
loop at gt_outtab.
l_index = sy-tabix.
gt_outtab-count = l_index.
refresh lt_celltab.
if gt_outtab-seatsmax ge 300.
perform fill_celltab using 'RW'
l_index
changing lt_celltab.
else.
perform fill_celltab using 'RO'
l_index
changing lt_celltab.
endif.
*§2c.Copy your celltab to the celltab of the current row of gt_outtab.
insert lines of lt_celltab into table gt_outtab-celltab.
modify gt_outtab index l_index.
endloop.
endform. " SELECT_DATA_AND_INIT_STYLE
*&---------------------------------------------------------------------*
*& Form FILL_CELLTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_PT_CELLTAB text
*----------------------------------------------------------------------*
form fill_celltab using value(p_mode) l_index
changing pt_celltab type lvc_t_styl.
data: ls_celltab type lvc_s_styl,
l_index1 type i,
l_mode type raw4,
l_rowstyle(1) type c.
* This forms sets the style of column 'PRICE' editable
* according to 'p_mode' and the rest to read only either way.
if p_mode eq 'RW'. ">300
*§2a.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_ENABLED to set a cell
* to status "editable".
l_mode = cl_gui_alv_grid=>mc_style_enabled.
else. "p_mode eq 'RO' "<300
*§2b.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_DISABLED to set a cell
* to status "non-editable".
l_mode = cl_gui_alv_grid=>mc_style_disabled.
endif.
* is row style selected?
l_rowstyle = g_rstyle.
l_index1 = l_index.
* define rowstyle for single rows:
if l_rowstyle is not initial.
clear ls_celltab.
if l_index1 <= '100'.
ls_celltab-fieldname = ' '.
ls_celltab-style = cl_gui_alv_grid=>mc_style_no_delete_row. " row not deleted
insert ls_celltab into table pt_celltab.
* define editablility of single cells:
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = l_mode. "depending on value seatmax
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = l_mode.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
else.
* rows can be deleted
if l_index1 > 100 and l_index1 <= 200.
* do nothing for row style and cell style
* set cell style:
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = l_mode. "depending on value seatmax
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = l_mode.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
else.
if l_index1 > 200 and l_index1 <= 250.
* everything is editable: > 300, rows can not be deleted
ls_celltab-fieldname = ' '.
ls_celltab-style = cl_gui_alv_grid=>mc_style_no_delete_row. " row not deleted
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
else. "BT 250 and 600 rows can be deleted.
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
endif.
endif.
endif.
else.
*without any row style: rows can be deleted
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled. "depending on value seatmax
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
endif.
endform. " FILL_CELLTAB
*&---------------------------------------------------------------------*
*& Form SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form switch_edit_mode.
if grid1->is_ready_for_input( ) eq 0.
* set edit enabled cells ready for input
call method grid1->set_ready_for_input
exporting
i_ready_for_input = 1.
else.
* lock edit enabled cells against input
call method grid1->set_ready_for_input
exporting
i_ready_for_input = 0.
endif.
endform. " SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_FIELDCAT text
*----------------------------------------------------------------------*
form set_fieldcat using rt_fieldcat type lvc_t_fcat.
data: ls_fieldcat type lvc_s_fcat,
lt_fieldcat type lvc_t_fcat,
n type i. "#EC NEEDED
call function 'LVC_FIELDCATALOG_MERGE'
exporting
i_structure_name = 'SFLIGHT'
changing
ct_fieldcat = gt_fieldcat
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
if sy-subrc <> 0. "#EC *
* Implement suitable error handling here
endif.
lt_fieldcat = rt_fieldcat.
* add count field
ls_fieldcat-fieldname = 'COUNT'.
ls_fieldcat-inttype = 'I'.
ls_fieldcat-datatype = 'INT2'.
ls_fieldcat-scrtext_s = 'Count'. "#EC NOTEXT
ls_fieldcat-scrtext_m = 'Count'. "#EC NOTEXT
ls_fieldcat-scrtext_l = 'Counter'. "#EC NOTEXT
ls_fieldcat-col_pos = '1'.
ls_fieldcat-col_opt = 'X'.
ls_fieldcat-intlen = 2.
ls_fieldcat-outputlen = 2.
append ls_fieldcat to lt_fieldcat.
rt_fieldcat = lt_fieldcat.
endform. " SET_FIELDCAT
Output:
1.Extend your output table for a field, e.g., CELLTAB, that holds information about the edit status of each cell for the corresponding row (the table type is SORTED!).
2. After selecting data, set edit status for each row in a loop according to field SEATSMAX.
a.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_ENABLED to set a cell to status "editable".
b.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_DISABLED to set a cell to status "non-editable".
c.Copy your celltab to the celltab of the current row of gt_outtab.
3.Provide the fieldname of the celltab field by using field STYLEFNAME of the layout structure.
Sample Code:
data: ok_code like sy-ucomm,
save_ok like sy-ucomm,
g_container type scrfname value 'BCALV_GRID_DEMO_0100_CONT1',
grid1 type ref to cl_gui_alv_grid,
g_custom_container type ref to cl_gui_custom_container,
gs_layout type lvc_s_layo.
* g_max type i value 500.
*§1.Extend your output table for a field, e.g., CELLTAB, that holds
* information about the edit status of each cell for the
* corresponding row (the table type is SORTED!).
data: begin of gt_outtab occurs 0, "with header line
count type int2.
include structure sflight.
data: celltab type lvc_t_styl.
data: end of gt_outtab.
data: gs_fieldcat type lvc_s_fcat,
gt_fieldcat type lvc_t_fcat.
parameters: g_max type i default '600',
g_rstyle type char1 as checkbox,
g_rowins type char1 as checkbox. "default 'X'. "key active
*---------------------------------------------------------------------*
* MAIN *
*---------------------------------------------------------------------*
call screen 100.
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
module pbo output.
set pf-status 'MAIN100'.
set titlebar 'MAIN100'.
if g_custom_container is initial.
create object g_custom_container
exporting
container_name = g_container.
create object grid1
exporting
i_parent = g_custom_container.
* select data, set styles
perform select_data_and_init_style.
*§3.Provide the fieldname of the celltab field by using field
* STYLEFNAME of the layout structure.
gs_layout-stylefname = 'CELLTAB'.
gs_layout-sel_mode = 'D'.
* short key 'Delete row' active?
if g_rowins is not initial.
gs_layout-no_rowins = 'X'. "not allowed
endif.
* fieldcat
perform set_fieldcat using gt_fieldcat.
call method grid1->set_table_for_first_display
exporting "i_structure_name = 'SFLIGHT'
is_layout = gs_layout
changing
it_outtab = gt_outtab[]
it_fieldcatalog = gt_fieldcat.
endif.
endmodule.
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
module pai input.
save_ok = ok_code.
clear ok_code.
case save_ok.
when 'EXIT'.
perform exit_program.
when 'SWITCH'.
perform switch_edit_mode.
when others.
* do nothing
endcase.
endmodule.
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
form exit_program.
set screen 0.
leave screen.
endform.
*&---------------------------------------------------------------------*
*& Form SELECT_DATA_AND_INIT_STYLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form select_data_and_init_style.
data: lt_sflight type table of sflight with header line,
lt_celltab type lvc_t_styl,
l_index type i.
select * from sflight into table lt_sflight up to g_max rows.
* move corresponding fields from lt_sflight to gt_outtab
loop at lt_sflight.
move-corresponding lt_sflight to gt_outtab.
append gt_outtab.
endloop.
*§2.After selecting data, set edit status for each row in a loop
* according to field SEATSMAX.
loop at gt_outtab.
l_index = sy-tabix.
gt_outtab-count = l_index.
refresh lt_celltab.
if gt_outtab-seatsmax ge 300.
perform fill_celltab using 'RW'
l_index
changing lt_celltab.
else.
perform fill_celltab using 'RO'
l_index
changing lt_celltab.
endif.
*§2c.Copy your celltab to the celltab of the current row of gt_outtab.
insert lines of lt_celltab into table gt_outtab-celltab.
modify gt_outtab index l_index.
endloop.
endform. " SELECT_DATA_AND_INIT_STYLE
*&---------------------------------------------------------------------*
*& Form FILL_CELLTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_PT_CELLTAB text
*----------------------------------------------------------------------*
form fill_celltab using value(p_mode) l_index
changing pt_celltab type lvc_t_styl.
data: ls_celltab type lvc_s_styl,
l_index1 type i,
l_mode type raw4,
l_rowstyle(1) type c.
* This forms sets the style of column 'PRICE' editable
* according to 'p_mode' and the rest to read only either way.
if p_mode eq 'RW'. ">300
*§2a.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_ENABLED to set a cell
* to status "editable".
l_mode = cl_gui_alv_grid=>mc_style_enabled.
else. "p_mode eq 'RO' "<300
*§2b.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_DISABLED to set a cell
* to status "non-editable".
l_mode = cl_gui_alv_grid=>mc_style_disabled.
endif.
* is row style selected?
l_rowstyle = g_rstyle.
l_index1 = l_index.
* define rowstyle for single rows:
if l_rowstyle is not initial.
clear ls_celltab.
if l_index1 <= '100'.
ls_celltab-fieldname = ' '.
ls_celltab-style = cl_gui_alv_grid=>mc_style_no_delete_row. " row not deleted
insert ls_celltab into table pt_celltab.
* define editablility of single cells:
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = l_mode. "depending on value seatmax
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = l_mode.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
else.
* rows can be deleted
if l_index1 > 100 and l_index1 <= 200.
* do nothing for row style and cell style
* set cell style:
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = l_mode. "depending on value seatmax
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = l_mode.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
insert ls_celltab into table pt_celltab.
else.
if l_index1 > 200 and l_index1 <= 250.
* everything is editable: > 300, rows can not be deleted
ls_celltab-fieldname = ' '.
ls_celltab-style = cl_gui_alv_grid=>mc_style_no_delete_row. " row not deleted
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
else. "BT 250 and 600 rows can be deleted.
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
endif.
endif.
endif.
else.
*without any row style: rows can be deleted
ls_celltab-fieldname = 'CARRID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CONNID'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled. "depending on value seatmax
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'CURRENCY'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSMAX'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'SEATSOCC'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PAYMENTSUM'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
insert ls_celltab into table pt_celltab.
endif.
endform. " FILL_CELLTAB
*&---------------------------------------------------------------------*
*& Form SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form switch_edit_mode.
if grid1->is_ready_for_input( ) eq 0.
* set edit enabled cells ready for input
call method grid1->set_ready_for_input
exporting
i_ready_for_input = 1.
else.
* lock edit enabled cells against input
call method grid1->set_ready_for_input
exporting
i_ready_for_input = 0.
endif.
endform. " SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_FIELDCAT text
*----------------------------------------------------------------------*
form set_fieldcat using rt_fieldcat type lvc_t_fcat.
data: ls_fieldcat type lvc_s_fcat,
lt_fieldcat type lvc_t_fcat,
n type i. "#EC NEEDED
call function 'LVC_FIELDCATALOG_MERGE'
exporting
i_structure_name = 'SFLIGHT'
changing
ct_fieldcat = gt_fieldcat
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
if sy-subrc <> 0. "#EC *
* Implement suitable error handling here
endif.
lt_fieldcat = rt_fieldcat.
* add count field
ls_fieldcat-fieldname = 'COUNT'.
ls_fieldcat-inttype = 'I'.
ls_fieldcat-datatype = 'INT2'.
ls_fieldcat-scrtext_s = 'Count'. "#EC NOTEXT
ls_fieldcat-scrtext_m = 'Count'. "#EC NOTEXT
ls_fieldcat-scrtext_l = 'Counter'. "#EC NOTEXT
ls_fieldcat-col_pos = '1'.
ls_fieldcat-col_opt = 'X'.
ls_fieldcat-intlen = 2.
ls_fieldcat-outputlen = 2.
append ls_fieldcat to lt_fieldcat.
rt_fieldcat = lt_fieldcat.
endform. " SET_FIELDCAT
Output:
No comments:
Post a Comment