ABAP - Function ALV 07 单元格编辑

  • 使用REUSE_ALV_GRID_DISPLAY_LVC显示ALV时,可以将列、行或者具体的某个单元格设置成可编辑能输入状态.
  1. 列可编辑只要将Fieldcat中的字段edit设置成‘X',整列就变成能输入的了,LVC_S_FCAT-EDIT = 'X'.
    GT_FIELDCAT TYPE LVC_S_FCAT.
    gW_FIELDCAT LIKE LINE OF GT_FIELDCAT.
    
    ...
    GW_FIELDCAT-EDIT = 'X'.
    APPEND GW_FIELDCAT-EDIT TO GT_FIELDCAT.
  2.  整个ALV可编辑 ,Layout的字段edit设置成'X'。
    gs_layout type LVC_S_LAYO.
    
    gs_layout-edit = 'X'.

     

  3. 单元格不可编辑 。如果要让单元格变成可输入,需要在alv输出内表中多定义一个保存单元格style的字段(类型:lvc_t_styl ),然后填入style属性(可编辑或者是不可编辑),最后还要在layout-stylefname中指定style的字段名。
  • 内表结构中增加一个字段
    TYPES:BEGIN OF ty_data,
            sel TYPE char1,
            style TYPE lvc_t_styl,  "将该字段设置为保存编辑状态的字段
          END OF ty_data.
    
    
  •  Fieldcat 赋值(  MC_STYLE_DISABLED:禁止输入、MC_STYLE_ENABLED:可输入。)
    DATA:gw_edit TYPE lvc_s_styl,
         gt_edit TYPE lvc_t_styl.
    
    gw_edit-fieldname = 'SEL'.
    gw_edit-style     = cl_gui_alv_grid=>mc_style_disabled."设置为不可输入
    INSERT gwa_edit INTO TABLE git_edit.
    
    INSERT LINES OF gt_edit INTO TABLE gw_data-style.      "给ALV内表结构赋值
    
     
  • Layout赋值 
    DATA gs_layout TYPE lvc_s_layo.
    
    gs_layout-stylefname = 'STYLE'. "指定保存编辑状态的字段名

     

  • 显示效果,可以看到已经有些灰色了...点击也是单击不到的

  • 完整代码 
    TYPES:BEGIN OF ty_data,
            sel    TYPE char1,
            light  TYPE iconname,
            name   TYPE char10,
            score  TYPE p LENGTH 2 DECIMALS 1,
            remark TYPE c LENGTH 20,
            style  TYPE lvc_t_styl,
          END OF ty_data.
    
    DATA gt_data TYPE TABLE OF ty_data.
    DATA gw_data TYPE ty_data.
    
    DATA:gw_edit TYPE lvc_s_styl,
         gt_edit TYPE lvc_t_styl.
    
    ** Layout  变量定义
    DATA gs_layout   TYPE lvc_s_layo.
    
    ** Fieldcat 变量定义
    DATA:gt_fieldcat TYPE lvc_t_fcat,
         gs_fieldcat LIKE LINE OF gt_fieldcat.
    
    ** FieldCat的宏
    DATA gv_pos TYPE i.
    
    DEFINE %%add_fieldcat.
      gv_pos = gv_pos + 1.
      gs_fieldcat-col_pos = gv_pos.
      gs_fieldcat-fieldname = &1.
      gs_fieldcat-scrtext_m = &2.
    
      CASE &1.
        WHEN 'SEL'.
          gs_fieldcat-checkbox = 'X'. "当做选择框显示
          gs_fieldcat-edit     = 'X'. "该字段可以编辑
      ENDCASE.
    
      APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.
    END-OF-DEFINITION.
    
    START-OF-SELECTION.
    
      PERFORM get_data.
      PERFORM dis_falv.
    
    FORM get_data.
      gt_data[] = VALUE #(
                         ( sel = '' light = '' name = 'TOM'    score = '58')
                         ( sel = '' light = '' name = 'JEERY'  score = '98')
                         ( sel = '' light = '' name = 'MASTER' score = '68')
                       ).
    
      LOOP AT gt_data INTO gw_data.
        IF gw_data-score < 60.
          gw_data-light =  icon_red_light.
          gw_data-remark = '不及格'.
        ELSEIF gw_data-score >= 60 AND  gw_data-score < 85.
          gw_data-light =  ICON_yellow_LIGHT.
          gw_data-remark = '良好'.
        ELSEIF gw_data-score >= 85.
          gw_data-light =  ICON_green_LIGHT.
          gw_data-remark = '优秀'.
          gw_edit-fieldname = 'SEL'.
          gw_edit-style = cl_gui_alv_grid=>mc_style_disabled."设置为不可输入
          INSERT gw_edit INTO TABLE gt_edit.
    
          INSERT LINES OF gt_edit INTO TABLE gw_data-style.
          CLEAR gt_edit[].
        ENDIF.
        MODIFY gt_data FROM gw_data.
      ENDLOOP.
    ENDFORM.
    
    FORM dis_falv.
    ** Fieldcat字段映射处理
      %%add_fieldcat:'SEL'      '选择',  "( 前面字段值不可变 后面字段描述可变 每一行都是)
                     'LIGHT'    '状态',
                     'REMARK'   '备注',
                     'NAME'     '姓名',
                     'SCORE'    '分数'.
    
    ** Layout布局处理
      gs_layout-cwidth_opt = 'X'.     "自动优化列宽 (可以使用**在一行代码面前注释掉 看看ALV会有什么效果)
      gs_layout-zebra = 'X'.          "斑马纹输出
      gs_layout-stylefname = 'STYLE'. "单元格可编辑
    ** 调用FunctionALV需要传入的参数:展示数据,FieldCat,Layout,Status
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_callback_program       = sy-repid
          i_callback_pf_status_set = 'FRM_SET_STATUS'
          is_layout_lvc            = gs_layout
          it_fieldcat_lvc          = gt_fieldcat
        TABLES
          t_outtab                 = gt_data[]
        EXCEPTIONS
          program_error            = 1
          OTHERS                   = 2.
    ENDFORM.
    
    FORM frm_set_status USING p_extab TYPE slis_t_extab.
      SET PF-STATUS 'STANDARD'.
    ENDFORM.

 

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值