我有简单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
谢谢,
答案 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.