ALV可编辑状态

ALV可编辑,可以利用面过程,也可以利用面向对象。

1.利用面向过程
 i_grid_settings-edt_cll_cb  = 'X' .            "显示界面可编辑字段上修改了数据,回车后就会立即将内表的数据也修改
  layout-colwidth_optimize    = 'X'.                "设置字段列宽自适应
 layout-zebra             = 'X'.

 CLEAR afield.
 REFRESH fieldcat.

 fill  'MARK'       '选择'          '' 'X' 'X'.
  fieldcat-checkbox = 'X'.
  fieldcat-hotspot = ''.
  MODIFY fieldcat INDEX 1 TRANSPORTING checkbox hotspot.
  fill 'WERKS' '工厂' '' '' ''.
  fill 'MATNR' '物料编码' '' '' ''.
  fill 'MAKTX' '物料描述' '' '' ''.
  fill 'LIFNR' '供应商编码' '' '' ''.
  fill 'NAME1' '供应商描述' '' '' ''.
  IF r1 = 'X'.
   fill 'MAJOR' '专业' '' '' ''.
  ELSE.
    fill 'MAJOR' '专业' '' '' 'X'.
  ENDIF.
  IF r1 = 'X'.
    fill 'ESOSTU' 'ESO认可状态' '' '' ''.
  ELSE.
    fill 'ESOSTU' 'ESO认可状态' '' '' 'X'.
  ENDIF.
   IF r1 = 'X'.
   fill 'ESONO' 'ESO认可/拒绝编号' '' '' ''.
  ELSE.
    fill 'ESONO' 'ESO认可/拒绝编号' '' '' 'X'.
  ENDIF.
   IF r1 = 'X'.
    fill 'ESODATE' 'ESO认可/拒绝日期' '' '' ''.
  ELSE.
    fill 'ESODATE' 'ESO认可/拒绝日期' '' '' 'X'.
  ENDIF.
   IF r1 = 'X'.
    fill 'PPAPSTU' 'PPAP认可状态' '' '' ''.
  ELSE.
    fill 'PPAPSTU' 'PPAP认可状态' '' '' 'X'.
  ENDIF.
   IF r1 = 'X'.
    fill 'PPAPNO' 'PPAP认可/拒绝编号' '' '' ''.
  ELSE.
    fill 'PPAPNO' 'PPAP认可/拒绝编号' '' '' 'X'.
  ENDIF.
   IF r1 = 'X'.
    fill 'PPAPDATE' 'PPAP认可/拒绝日期' '' '' ''.
  ELSE.
    fill 'PPAPDATE' 'PPAP认可/拒绝日期' '' '' 'X'.
  ENDIF.

  fill 'DLED' '删除标识' '' '' ''.
 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_grid_settings          = i_grid_settings                 "显示界面可编辑字段上修改了数据,回车后就会立即将内表的数据也修改
     i_callback_program       = sy-cprog "sy-repid                        "标记当前程序
     it_fieldcat              = fieldcat[]
      is_layout                = layout
      i_callback_user_command  = 'USER_COMMAND'
     i_callback_pf_status_set = 'SET_STATUS'
    TABLES
     t_outtab                 = item.

2. 利用OO-ALV的方法

2.1 全部可编辑 demo

FORM display_alv .
  IF  wcl_alv IS INITIAL.
    CREATE OBJECT wcl_container             " create container
      EXPORTING
        container_name = 'CONTAINER'.   " The name is CAPSLOCK.
    IF wcl_container IS NOT INITIAL.
      CREATE OBJECT wcl_alv                " create alv
        EXPORTING
          i_parent = wcl_container.
    ENDIF.
    " 设置所有的列都可以编辑
      gs_layout-EDIT = 'X'.
    "获取字段目录
    PERFORM prepare_field_catalog CHANGING gt_fieldcat.
    "获取样式
    PERFORM prepare_layout CHANGING gs_layout.
    "获取需要显示的数据
    PERFORM get_data TABLES gt_list.
    "显示ALV
    CALL METHOD wcl_alv->set_table_for_first_display
      EXPORTING
        is_layout                     = gs_layout
      CHANGING
        it_outtab                     = gt_list[]
        it_fieldcatalog               = gt_fieldcat
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
  ELSE.

    CALL METHOD wcl_alv->refresh_table_display
      EXCEPTIONS
        finished = 1
        OTHERS   = 2.
    IF sy-subrc <> 0.

    ENDIF.
  ENDIF.
  endform.

2.2 部分字段可编辑 demo

FORM prepare_field_catalog  CHANGING p_gt_fieldcat TYPE lvc_t_fcat.

  DATA ls_fcat TYPE lvc_s_fcat .
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE        =
      i_structure_name       = 'ZTESOPPAP'
*     I_CLIENT_NEVER_DISPLAY = 'X'
*     I_BYPASSING_BUFFER     =
*     I_INTERNAL_TABNAME     =
    CHANGING
      ct_fieldcat            = p_gt_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  LOOP AT p_gt_fieldcat  INTO ls_fcat.

    IF ls_fcat-fieldname EQ 'MAJOR' OR
       ls_fcat-fieldname EQ 'ESOSTU'  OR
      ls_fcat-fieldname EQ 'ESONO'  OR
      ls_fcat-fieldname EQ 'ESODATE'  OR
      ls_fcat-fieldname EQ 'PPAPSTU'  OR
      ls_fcat-fieldname EQ 'PPAPNO'  OR
      ls_fcat-fieldname EQ 'PPAPDATE'.
     ls_fcat-edit  = 'X'.
      MODIFY p_gt_fieldcat FROM ls_fcat.
    ENDIF.

  ENDLOOP.

  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM. 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值