2016-06-14 35 views
0

我想訪問ALV OOPS實例中已刪除行的單元格值。data_changed with deleted rows - ABAP

LOOP AT er_data_changed->mt_deleted_rows INTO ls_del. 
    CALL METHOD er_data_changed->get_cell_value 
    EXPORTING 
     i_row_id = ls_del-row_id 
     i_fieldname = 'FIPEX' 
    IMPORTING 
     e_value  = lv-fipex. 
ENDLOOP. 

lv-fipex總是空白。爲什麼get_cell_value不適用於刪除的行?我能爲此使用什麼?

+1

請添加一個完整的工作示例,以便任何人都可以重現該問題。 – vwegert

回答

1

此方法似乎只在您修改特定單元或某一行的單元格時返回數據。爲了實現你想要從內部表中直接讀取的CHANGING參數,在調用方法SET_TABLE_FOR_FIRST_DISPLAY中調用。實際刪除發生在事件DATA_CHANGED之後,因此您可以這樣做,因爲要刪除的數據仍在內部表中。

看看這個例子(你必須自己創建屏幕和狀態100)。

REPORT ZZZ. 

CLASS lcl_main DEFINITION FINAL CREATE PRIVATE. 
    PUBLIC SECTION. 
    CLASS-METHODS: 
     main, 
     on_data_changed FOR EVENT data_changed OF cl_gui_alv_grid 
     IMPORTING 
      er_data_changed, 
     on_double_click FOR EVENT double_click OF cl_gui_alv_grid 
     IMPORTING 
      es_row_no. 
    PRIVATE SECTION. 
    CLASS-DATA: 
     st_t000 TYPE STANDARD TABLE OF t000 WITH EMPTY KEY. 
ENDCLASS. 

MODULE status_0100 OUTPUT. 
    SET PF-STATUS '100'. 
    lcl_main=>main(). 
ENDMODULE. 

MODULE user_command_0100 INPUT. 
    IF sy-ucomm = 'BACK'. 
    LEAVE TO SCREEN 0. 
    ENDIF. 
ENDMODULE. 

CLASS lcl_main IMPLEMENTATION. 
    METHOD on_double_click. 
    ASSERT 1 = 1. 
    ENDMETHOD. 

    METHOD on_data_changed. 
    DATA: l_value TYPE t000-ort01. 
    LOOP AT er_data_changed->mt_deleted_rows ASSIGNING FIELD-SYMBOL(<fs_deleted_row>). 
*  er_data_changed->get_cell_value(
*  EXPORTING 
*   i_row_id = <fs_deleted_row>-row_id 
*   i_fieldname = 'ORT01' 
*  IMPORTING 
*   e_value = l_value 
*  ). 
     l_value = st_t000[ <fs_deleted_row>-row_id ]-ort01. 
    ENDLOOP. 
    ENDMETHOD. 

    METHOD main. 
    DATA(lo_gui_container) = NEW cl_gui_custom_container(container_name = 'CONTAINER'). 
    DATA(lo_gui_alv_grid) = NEW cl_gui_alv_grid(i_parent = lo_gui_container). 

    SELECT * FROM t000 INTO TABLE st_t000 UP TO 20 ROWS. 

    lo_gui_alv_grid->set_ready_for_input(1). 

    SET HANDLER on_data_changed FOR lo_gui_alv_grid. 
    SET HANDLER on_double_click FOR lo_gui_alv_grid. 

    lo_gui_alv_grid->set_table_for_first_display(
     EXPORTING 
     i_structure_name = 'T000' 
     CHANGING 
     it_outtab = st_t000 
     EXCEPTIONS 
     invalid_parameter_combination = 1 
     program_error = 2 
     too_many_lines = 3 
     OTHERS = 99 
    ). 
    ASSERT sy-subrc = 0. 
    ENDMETHOD. 
ENDCLASS. 

START-OF-SELECTION. 
    CALL SCREEN 100. 
+0

有幫助,謝謝 – Darko

+0

非常歡迎。快樂的編碼! – Jagger

相關問題