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.