Вы находитесь на странице: 1из 6

In this program the field Price of sflight is editable and when you edit the price this

price is modified with modifying the value in the cost column also that has been added
in the field sting of the table. When you press enter the values are changed. This
example will help u to trance the changed value and then modify other values
according to it.
DATA: ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm,
g_grid TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container,
gt_fieldcat TYPE lvc_t_fcat,
gs_layout TYPE lvc_s_layo.
DATA :
BEGIN OF fs_sflight,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
price TYPE sflight-price,
cost TYPE sflight-price,
END OF fs_sflight.
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: g_event_receiver TYPE REF TO lcl_event_receiver.
DATA: t_sflight LIKE STANDARD TABLE OF fs_sflight.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
METHODS: check_price
IMPORTING
ps_good_price TYPE lvc_s_modi
pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
METHODS: ch_new_price_v_new_cost
IMPORTING
psg_cost TYPE lvc_s_modi
ps_flight LIKE fs_sflight
pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
ENDCLASS. "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*

* CLASS lcl_event_receiver IMPLEMENTATION


*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_data_changed.
DATA: ls_good TYPE lvc_s_modi,
ls_sflight TYPE sflight,
ls_good_cost TYPE lvc_s_modi.
DATA: l_price TYPE sflight-price.
LOOP AT er_data_changed->mt_good_cells INTO ls_good.
CASE ls_good-fieldname.
* check if column PLANETYPE of this row was changed
WHEN 'PRICE'.
CALL METHOD check_price
EXPORTING
ps_good_price = ls_good
pr_data_changed = er_data_changed.
ENDCASE.
ENDLOOP.
ENDMETHOD. "handle_data_changed
METHOD check_price.
DATA: l_price TYPE sflight-price,
ls_good_cost TYPE lvc_s_modi.
CALL METHOD pr_data_changed->get_cell_value
EXPORTING
i_row_id = ps_good_price-row_id
i_fieldname = ps_good_price-fieldname
IMPORTING
e_value = l_price.
READ TABLE pr_data_changed->mt_good_cells
INTO ls_good_cost
WITH KEY row_id = ps_good_price-row_id
fieldname = 'PRICE'.
IF sy-subrc = 0.
READ TABLE t_sflight INTO fs_sflight INDEX ps_good_price-row_id.
MOVE l_price TO fs_sflight-cost.
CALL METHOD ch_new_price_v_new_cost
EXPORTING
psg_cost = ps_good_price
ps_flight = fs_sflight
pr_data_changed = pr_data_changed.
ENDIF.
ENDMETHOD. "check_price
METHOD ch_new_plane_v_new_seatsocc.

DATA: l_price TYPE sflight-price.


DATA: l_cost TYPE sflight-price.
.Get new cell value to check it using method GET_CELL_VALUE.
* (In this case COST).
CALL METHOD pr_data_changed->get_cell_value
EXPORTING
i_row_id = psg_cost-row_id
i_fieldname = psg_cost-fieldname
IMPORTING
e_value = l_cost.
READ TABLE t_sflight INTO fs_sflight INDEX psg_cost-row_id.
MOVE l_COST TO fs_sflight-cost.
CALL METHOD pr_data_changed->modify_cell
EXPORTING
i_row_id = psg_cost-row_id
i_fieldname = 'COST'
i_value = ps_flight-cost.
ENDMETHOD. "check_planetype
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
END-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS'.
PERFORM create_and_init_alv CHANGING t_sflight
gt_fieldcat
gs_layout.
ENDMODULE. " STATUS_0100 OUTPUT
*---------------------------------------------------------------------*
** MODULE PAI INPUT **
*---------------------------------------------------------------------*
MODULE pai INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'EXIT'.
PERFORM exit_program.
ENDCASE.
ENDMODULE. "pai INPUT
*---------------------------------------------------------------------*
** FORM EXIT_PROGRAM **
*---------------------------------------------------------------------*

FORM exit_program.
LEAVE PROGRAM.
ENDFORM. "exit_program
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM build_fieldcat CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA w_cat TYPE lvc_s_fcat.
w_cat-fieldname = 'CARRID'.
w_cat-coltext = 'CARRID'.
w_cat-col_pos = 1.
w_cat-emphasize = 'C700'.
APPEND w_cat TO pt_fieldcat.
CLEAR w_cat.
w_cat-fieldname = 'CONNID'.
w_cat-coltext = 'Connection id'.
w_cat-col_pos = 2.
w_cat-just = 'C'.
APPEND w_cat TO pt_fieldcat.
CLEAR w_cat.
w_cat-fieldname = 'PRICE'.
w_cat-coltext = 'PRICE'.
w_cat-col_pos = 3.
APPEND w_cat TO pt_fieldcat.
CLEAR w_cat.
w_cat-fieldname = 'COST'.
w_cat-coltext = 'COST'.
w_cat-edit = 'X'.
w_cat-col_pos = 4.
APPEND w_cat TO pt_fieldcat.
CLEAR w_cat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'FS_SFLIGHT'
CHANGING
ct_fieldcat = pt_fieldcat.
LOOP AT pt_fieldcat INTO w_cat.
IF w_cat-fieldname EQ 'PRICE'.
w_cat-edit = 'X'.
MODIFY pt_fieldcat FROM w_cat.
ENDIF.
ENDLOOP.

ENDFORM. "build_fieldcat
*&---------------------------------------------------------------------*
*& Form create_and_init_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_OUTTAB text
* -->PT_FIELDCAT text
* -->PS_LAYOUT text
*----------------------------------------------------------------------*
FORM create_and_init_alv CHANGING pt_outtab LIKE t_sflight
pt_fieldcat TYPE lvc_t_fcat
ps_layout TYPE lvc_s_layo.
DATA: lt_exclude TYPE ui_functions.
CREATE OBJECT g_custom_container
EXPORTING
container_name = 'CONTAINER1'.
CREATE OBJECT g_grid
EXPORTING
i_parent = g_custom_container.
PERFORM build_fieldcat CHANGING pt_fieldcat.
PERFORM exclude_tb_functions CHANGING lt_exclude.
SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE
pt_outtab .
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
is_layout = ps_layout
it_toolbar_excluding = lt_exclude
CHANGING
it_fieldcatalog = pt_fieldcat
it_outtab = pt_outtab.
* set editable cells to ready for input
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
*Optionally register ENTER to raise event DATA_CHANGED.
* (Per default the user may check data by using the check icon).
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CREATE OBJECT g_event_receiver.
SET HANDLER g_event_receiver->handle_data_changed FOR g_grid.
ENDFORM. "CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
*& Form EXCLUDE_TB_FUNCTIONS

*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LT_EXCLUDE text
*----------------------------------------------------------------------*
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
* Only allow to change data not to create new entries (exclude
* generic functions).
DATA ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude TO pt_exclude.
ENDFORM. " EXCLUDE_TB_FUNCTIONS

Вам также может понравиться