ABAP ALV GRID:细胞价值

时间:2015-01-14 15:53:08

标签: sap abap

我有简单ALV,我想得到选择单元格的值,我尝试使用Alv Grid的get_select_cells方法,但值字段是INITIAL。

我不知道为什么,因为在这个单元格中我有文字或图标。

这种方法有什么不妥。

这是我的代码:

    FORM delete_livraison .
  DATA: lt_cells  TYPE lvc_t_cell,
        ls_cells  TYPE lvc_s_cell,
        lv_probl  TYPE xfeld.

  gr_alvpl->get_selected_cells(  IMPORTING et_cell = lt_cells ).

  LOOP AT lt_cells INTO ls_cells.
    IF ls_cells-col_id+0(3) NE 'DAY'.
*      lv_probl                    = 'X'.
    ENDIF.
    IF ls_cells-value IS INITIAL.
      lv_probl                    = 'X'.
    ENDIF.
  ENDLOOP.

* En cas de probleme
  IF lv_probl EQ 'X'.
*   Message d'erreur : Certaines des cellules sélectionnées ne supportent pas cet action.
    MESSAGE s029 DISPLAY LIKE 'E'.
  ENDIF.

ENDFORM.                    " DELETE_LIVRAISON

谢谢,

2 个答案:

答案 0 :(得分:1)

尝试在CL_GUI_CFW=>FLUSH( ).后调用GET_SELECTED_CELLS,但在评估结果之前。对于技术背景,我建议this document - 必须阅读控制编程。

另请注意,GET_SELECTED_CELLS将返回所选单元格的位置,而非内容

答案 1 :(得分:0)

get_select_cells是错误的任务方法,它仅返回索引用户连续选择的索引,而不返回选择的值。

要获取选择的值,请get_selected_cells( ) 一起get_selected_rows( )一起使用,并结合基于这些索引的itab数据:

CALL METHOD mo_grid->get_selected_cells
  IMPORTING
    et_cell = lt_cells.

CALL METHOD mo_grid->get_selected_rows
  IMPORTING
    et_row_no = lt_rows[].

IF lt_rows IS INITIAL.
  IF lt_cells[] IS INITIAL.
    EXIT.
  ENDIF.

  READ TABLE lt_cells INTO ls_cell INDEX 1.
  IF sy-subrc = 0.
    ls_row-row_id = ls_cell-row_id-index.
    APPEND ls_row TO lt_rows.
  ENDIF.
ENDIF.

 LOOP AT lt_rows INTO ls_row.
  READ TABLE <lt_lines> ASSIGNING <ls_line> INDEX ls_row-row_id.
  IF sy-subrc = 0.
    APPEND <ls_line> TO et_lines.
  ENDIF.
ENDLOOP.