CL_SALV_TABLE在自定义容器中列宽自动优化失效求助
自定义容器中CL_SALV_TABLE列宽自适应问题解决
在自定义容器中使用CL_SALV_TABLE展示ALV时,即便调用lo_columns->set_optimize( abap_true ),表头列宽仍未根据内容自适应,可通过以下方法解决:
调整set_optimize调用时机
set_optimize的宽度计算逻辑会受后续列属性修改(比如设置列文本、隐藏技术字段)影响,建议将该方法调用移至所有列属性配置完成后、display()方法之前,确保计算时已获取最终的列状态。
强制触发列宽重计算
若调整时机后仍无效果,可额外调用lo_columns->adjust_column_widths()方法,强制ALV根据单元格内容和表头文本重新计算并设置最优列宽。
检查容器尺寸设置
确保自定义容器的初始尺寸足够容纳自适应后的列宽,若容器被设置为固定过小的宽度,ALV会优先适配容器尺寸,导致列宽无法正常展开。可检查容器创建时的参数或屏幕元素属性,保证容器有足够的显示空间。
修改后的示例代码
DATA: lo_alv TYPE REF TO cl_salv_table, lo_columns TYPE REF TO cl_salv_columns_table, lo_column TYPE REF TO cl_salv_column_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( ). "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_columns->set_optimize( abap_true ). lo_columns->adjust_column_widths( ). " 强制触发列宽计算 lo_alv->display( ).
内容的提问来源于stack exchange,提问作者darth-coder
相关产品推荐
相关产品推荐

