ALV编辑后自动优化列宽

导语:最近开发了一个修改商品主数据的OOALV报表,毕竟用户不能使用SE16N,但是MM42又只能一条一条修改,很麻烦,这里就涉及到了指定列可编辑,以及优化列宽,业务顾问希望人性化一点,进来的时候优化列宽,然后输入完再优化列宽,我直呼,好家伙。

一、OOALV编辑后自动优化列宽

ALV的优化列宽是在layout里边控制的,实现在首次进入的时候优化列宽,需要设置gs_layout-cwidth_opt = ‘X’,不知道是我设置有问题还是咋回事,结果并不理想,商品编码没有全部展示出来。
在这里插入图片描述
在【输入之后自动优化列宽】需要一段代码,因为我这里需要输入编码带出描述,我就把这段代码放在了【changed_finished】事件的最后面,等所有的都处理完成,刷新一下LAYOUT和ALV就好了

 "刷新LAYOUT
  gs_layout-cwidth_opt = 'X'.
  CALL METHOD g_grid->set_frontend_layout
    EXPORTING
      is_layout = gs_layout.
 "刷新ALV
  CALL METHOD g_grid->refresh_table_display .

效果如下:
在这里插入图片描述

二、FUNCTION ALV,在按钮点击后自动优化列宽

在按钮事件里写如下

 FORM user_command USING u_ucomm LIKE sy-ucomm
                    rs_selfield TYPE slis_selfield.

  DATA: lo_grid TYPE REF TO cl_gui_alv_grid,
        lv_code LIKE sy-ucomm.
  DATA: ls_stable TYPE lvc_s_stbl.

  " 刷新alv屏幕数据
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lo_grid.

  CALL METHOD lo_grid->check_changed_data.

  CASE u_ucomm.
    WHEN '&IC1' .
      IF rs_selfield-fieldname = 'VBELN'."跳转的语法
        SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
      ENDIF.
  ENDCASE.

  DATA : ls_layout TYPE lvc_s_layo."也可以用原来的gs_layout

  CALL METHOD lo_grid->get_frontend_layout
    IMPORTING
      es_layout = ls_layout.

  ls_layout-cwidth_opt = 'X'.

  CALL METHOD lo_grid->set_frontend_layout
    EXPORTING
      is_layout = ls_layout.

  rs_selfield-refresh = 'X'.
ENDFORM.

注意:
在实践过程中这种操作是对用户的交互进行便捷,但是会增加代码风险,不建议进行这样的操作。

在实际的使用中发现,我们在usercommod中的选中行判断和这一步操作有冲突,使得无法获取选中行。

解决办法是在【changed_finished】事件刷新的时候判断一下,et_good_cells的值是为空,为空就不要进行刷新。

if et_good_cells[] is not initial.
 "刷新LAYOUT
  gs_layout-cwidth_opt = 'X'.
  CALL METHOD g_grid->set_frontend_layout
    EXPORTING
      is_layout = gs_layout.
 "刷新ALV
  CALL METHOD g_grid->refresh_table_display .
endif.

作者:小飞猪猪猪猪猪猪猪–CSDN
注意:转发请注明作者

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞猪猪猪猪猪猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值