3

我想获取ALV中选择单元格的值,我尝试get_selected_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.

  IF lv_probl EQ 'X'.
    MESSAGE s029 DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.

谢谢。

4

2 回答 2

1

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

要获取选定的值,请使用get_selected_cells( )和/或get_selected_rows( )与数据内部表一起使用:

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.
于 2019-12-18T13:48:36.657 回答
0

尝试CL_GUI_CFW=>FLUSH( ).在 之后GET_SELECTED_CELLS,但在评估结果之前调用。对于技术背景,我推荐这个文档——控制编程的必读。

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

于 2015-01-14T16:34:38.840 回答