2016-06-14 56 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