ALV单元格可编辑或不可编辑

说明:项目中和涉及到一些关于OOALV的需求,其中有一个就是业务顾问希望可以让用户编辑指定的单元格,而不是所有的单元格,降低一下用户操作中的风险,所以这里就涉及到了【指定单元格可编辑】。

以下示例为实现内表中选中行的【新物料描述】,【新旧物料号】这两列可编辑。

首先,在定义内表的时候添加一个定义,我这里习惯用【celtab】

  DATA :BENGIN OF GS_OUT,
    SEL        TYPE  C,             "选中框
    MATNR      TYPE  MATNR,         "物料编码
    MAKTX      TYPE  MAKT-MAKTX,    "物料描述
    MAKTX_NEW  TYPE  MAKT-MAKTX,    "新物料描述
    BISMT      TYPE  MARA-BISMT_NEW,"旧物料号
    BISMT_NEW  TYPE  MARA-BISMT_NEW,"新旧物料号
    celtab     TYPE  lvc_t_styl,  "控制字段可编辑的参数
  END OF GS_OUT.  

然后在layout中也添加一个赋值

  gs_layout-stylefname   = 'CELTAB'.

最后在你希望的条件下写代码来实现,这里我喜欢用perfrom,这样简洁一点。

编辑状态 【Edit】

  LOOP AT GT_OUT INTO GS_OUT WHERE SEL = 'X'.
    PERFORM frm_set_cell_en USING 'MAKTX_NEW'   CHANGING lw_out.
    PERFORM frm_set_cell_en USING 'BISMT_NEW'   CHANGING lw_out..
    MODIFY GT_OUT FROM GS_OUT.
  ENDLOOP.

"from内容
FORM frm_set_cell_en  USING pv_fname
                        CHANGING ps_data LIKE lw_out.

  DATA : lv_type     TYPE raw4,
         ls_cellattr TYPE lvc_s_styl.

  CLEAR : lv_type.
  lv_type = cl_gui_alv_grid=>mc_style_enabled.

  CLEAR: ls_cellattr.
  ls_cellattr-fieldname = pv_fname.
  ls_cellattr-style     = lv_type.
  INSERT ls_cellattr INTO TABLE ps_data-celtab.
ENDFORM.

显示状态【Display】

  LOOP AT GT_OUT INTO GS_OUT WHERE SEL = 'X'.
    PERFORM frm_set_cell_dis USING 'EAN11_NEW'  CHANGING lw_out.
    PERFORM frm_set_cell_dis USING 'MSTAE_NEW'  CHANGING lw_out.
    MODIFY GT_OUT FROM GS_OUT.
  ENDLOOP.

"from内容
FORM frm_set_cell_dis  USING pv_fname
                        CHANGING ps_data LIKE lw_out.

  DATA : lv_type     TYPE raw4,
         ls_cellattr TYPE lvc_s_styl.

  CLEAR : lv_type.
  lv_type = cl_gui_alv_grid=>mc_style_disabled.

  CLEAR: ls_cellattr.
  ls_cellattr-fieldname = pv_fname.
  ls_cellattr-style     = lv_type.
  INSERT ls_cellattr INTO TABLE ps_data-celtab.
ENDFORM.

**注意:**调用完perfrom后一定要【modify内表】

    MODIFY lt_out FROM lw_out.

注意:如果是uesr_command事件触发的,就要刷新一下ALV,才会改变编辑状态。

   CALL METHOD g_grid->refresh_table_display..

提示:最重要的是在OOALV展示下,有以下设置,不然以上所有的设置都不会生效

    CALL METHOD g_grid->set_ready_for_input
      EXPORTING
        i_ready_for_input = 1.

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

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ALV单元格动态可编辑ABAP技术在ALV报表上的一个重要扩展。ALVABAP List Viewer)是SAP系统中常用的报表显示工具,可以方便地展示和处理大量的数据。但是在默认情况下,ALV报表的单元格不可编辑的,用户只能查看报表数据而无法进行修改。 为了满足用户对报表数据进行动态修改的需求,开发人员通过对ALV控件进行扩展,使其支持单元格的动态可编辑功能。这样用户可以直接在报表上进行数据编辑,无需打开数据源进行修改。 实现ALV单元格动态可编辑的扩展需要进行如下步骤: 1. 定义ALV报表的显示结构。 首先,需要定义ALV报表的显示结构,包括字段名、字段类型、长度等信息。 2. 扩展ALV函数模块。 在ALV函数模块中,需要添加相应的功能模块来支持单元格的动态可编辑。通过修改ALV函数模块的代码,实现对报表数据的修改和保存。 3. 增加用户交互接口。 为了方便用户进行数据修改,可以在报表上添加一些用户交互接口,比如勾选框、输入框等。用户可以通过这些接口直接修改报表数据,并进行保存操作。 4. 编写逻辑处理程序。 最后,需要编写逻辑处理程序,处理用户的修改操作。这个程序会根据用户输入的数据,更新相应的报表数据,并将修改后的数据保存回数据库中。 通过以上步骤的扩展,用户可以实现在ALV报表中直接进行数据编辑的功能。这样,用户可以更加方便地进行数据修改和保存,提高工作效率。同时,ALV单元格动态可编辑的扩展也为定制化的报表需求提供了更多的灵活性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小飞猪猪猪猪猪猪猪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值