问题:有时候我们发现,我们对ALV上的数据操作后,然后更新ALV上某一列的信息,但是更新完成后,发现列宽没有跟着这一列的内容自动优化,无法全部显示这一列的信息,需要手工进行拖拉才能全部显示出来
解决方案:每次刷新ALV的时候,注意刷新一下layout
gs_layout-cwidth_opt = 'X'.
CALL METHOD lo_grid->set_frontend_layout
EXPORTING
is_layout = gs_layout.
ls_stbl-row = 'X'." 基于行的稳定刷新
ls_stbl-col = 'X'." 基于列稳定刷新
CALL METHOD lo_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl
EXCEPTIONS
finished = 1
OTHERS = 2.
详细代码如下:
FORM frm_user_command USING p_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
data: gs_layout TYPE lvc_s_layo,
ls_stbl TYPE lvc_s_stbl,
lo_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_grid.
CALL METHOD lo_grid->check_changed_data
IMPORTING
e_valid = lv_valid.
rs_selfield-refresh = 'X'.
"刷新ALV 的layout
gs_layout-cwidth_opt = 'X'.
CALL METHOD lo_grid->set_frontend_layout
EXPORTING
is_layout = gs_layout.
ls_stbl-row = 'X'." 基于行的稳定刷新
ls_stbl-col = 'X'." 基于列稳定刷新
CALL METHOD lo_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl
EXCEPTIONS
finished = 1
OTHERS = 2.
ENDFORM.
这样ALV的内容就可以稳定的按照列的内容长度大小自动优化列宽输出了