SAP ABAP CL_SALV_TABLE的列优化功能不起作用
我在自定义容器中使用 CL_SALV_TABLE 显示一个ALV,但即使调用了 lo_columns->set_optimize( abap_true ),表头列的宽度都相同,且不会根据内容自动调整。
如何让在容器中显示时,CL_SALV_TABLE 的列能够自动根据内容调整宽度?使用 set_optimize 与容器一起时是否有需要特别注意的事项,还是有其他强制自动调整大小的方法?谢谢!
以下是我的代码的简化版本:
DATA: lo_alv TYPE REF TO cl_salv_table,
lo_columns TYPE REF TO cl_salv_columns_table.
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = io_container
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = ct_final ).
CATCH cx_salv_msg INTO DATA(lx_msg).
MESSAGE lx_msg->get_text( ) TYPE 'E'.
ENDTRY.
lo_columns = lo_alv->get_columns( ).
lo_columns->set_optimize( abap_true ). "Optimize
"Set texts
TRY.
lo_column = lo_columns->get_column( 'BANFN' ).
lo_column->set_short_text( CONV #( TEXT-002 ) ).
lo_column->set_medium_text( CONV #( TEXT-002 ) ).
lo_column->set_long_text( CONV #( TEXT-002 ) ).
CATCH cx_salv_not_found.
ENDTRY.
"Hide technical fields
TRY.
lo_column = lo_columns->get_column( 'STATU' ).
lo_column->set_technical( abap_true ).
CATCH cx_salv_not_found.
ENDTRY.
lo_alv->display( ).
解决方案
下面是一个最小可复现的示例,用来演示列优化:
REPORT z_alv_optimize_columns.
PARAMETERS dummy.
AT SELECTION-SCREEN OUTPUT.
DATA go_salv TYPE REF TO cl_salv_table.
IF go_salv IS NOT BOUND.
SELECT *
FROM sflight
INTO TABLE @DATA(gt_sflight).
cl_salv_table=>factory( EXPORTING r_container = cl_gui_container=>screen0
IMPORTING r_salv_table = go_salv
CHANGING t_table = gt_sflight ).
go_salv->get_columns( )->set_optimize( abap_true ).
go_salv->display( ).
ENDIF.
带列优化的结果:
如果你的程序仍然存在问题,请把问题做成可复现的版本(我可以在我的系统上不费力地重现它)或让我修改我的程序以复现你的问题并进行沟通。
供参考,这是没有列优化的结果:
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

