开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
HELLO,这里是百里,一个开发中的ABAPER,在我们开发中的会经常遇到ALV展示中的数据需要编辑,经过百里研究发现目前总共有两种ALV可编辑的方式,这里分享给大家.
在ALV展示内容时,分为直接查看,用户事件,跳转,光标事件等等,其中编辑ALV数据是经常使用的动作. 这里简单介绍两种ALV可编辑的方式.
在传统ALV中 只需要配置 wa_fieldcat-edit = 'X' ,
即可使对应列进行编辑. 注意使用时要配置,对应的STATUS,USERCOMED,否则双击时会出现报错的情况 .
定义数据变量
TYPES : BEGIN OF ty_Data ,
doccode TYPE char20 ,
zrwoid TYPE char20 ,
matcode TYPE char20 ,
matname TYPE char20 ,
uom TYPE char20,
memo TYPE char20 ,
END OF ty_Data .
data : gs_Data TYPE ty_Data .
data : gt_Data TYPE TABLE of ty_Data .
定义ALV变量内容
" alv 通用变量
DATA: wa_layout TYPE lvc_s_layo.
DATA:wa_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat.
获取数据
select * from ZWDEMOTABLE1 into CORRESPONDING FIELDS OF TABLE gt_Data .
定义ALV相关变量及调用ALV函数
FORM diaplay_data .
PERFORM set_alv_layout.
PERFORM bulid_fieldcat.
PERFORM call_alv_func.
ENDFORM.
FORM set_alv_layout .
CLEAR: wa_layout.
wa_layout-zebra = 'X'. "斑马线
wa_layout-cwidth_opt = 'X'. "自动列宽
wa_layout-stylefname = 'CELTAB'.
ENDFORM.
FORM bulid_fieldcat .
DEFINE add_col.
* ADD 1 TO pos.
* lw_fieldcat-col_pos = pos.
wa_fieldcat-fieldname = &1.
wa_fieldcat-ref_field = &2.
wa_fieldcat-ref_table = &3.
wa_fieldcat-scrtext_l = &4.
wa_fieldcat-outputlen = &5.
wa_fieldcat-no_zero = &6.
wa_fieldcat-edit = &7.
wa_fieldcat-edit_mask = &8.
wa_fieldcat-key = &9.
CASE wa_fieldcat-fieldname.
WHEN 'MATCODE' OR 'MATNAME' .
wa_fieldcat-edit = 'X' .
" WHEN 'slbox'.
" wa_fieldcat-checkbox = 'X' .
" wa_fieldcat-edit = 'X' .
" wa_fieldcat-edit_mask = 'X'.
" WHEN 'VBELN' .
" wa_fieldcat-HOTSPOT = 'X' .
" WHEN 'KBETR'.
" wa_fieldcat-decimals_o = 2 .
" WHEN 'FKIMG' .
" wa_fieldcat-decimals_o = 0 .
WHEN OTHERS.
ENDCASE .
APPEND wa_fieldcat TO gt_fieldcat.
CLEAR : wa_fieldcat.
END-OF-DEFINITION.
REFRESH: gt_fieldcat.
" add_col 'slbox' space space '选项' space space space space space.
add_col 'DOCCODE' space space '单号' space space space space space.
add_col 'ZROWID' space space 'rowid' space space space space space.
add_col 'MATCODE' space space '料号' space space space space space.
add_col 'MATNAME' space space '料名' space space space space space.
add_col 'UOM' space space '单位' space space space space space.
add_col 'MEMO' space space '备注' space space space space space.
ENDFORM.
FORM call_alv_func .
DATA :gt_event TYPE slis_t_event,
gs_event TYPE slis_alv_event.
" MOVE 'DATA_CHANGED' TO gs_event-name.
" MOVE 'ALV_DATA_CHANGED' TO gs_event-form.
APPEND gs_event TO gt_event.
gs_grid-edt_cll_cb = abap_true. " 选中复选款,立刻触发data changed 事件
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid "回调程序
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
i_grid_settings = gs_grid
is_layout_lvc = wa_layout
it_fieldcat_lvc = gt_fieldcat "需要显示的内表的列
i_save = 'A'
it_events = gt_event
TABLES
t_outtab = gt_DAta "需要显示的数据
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
结果展示
如图,料号,及料名两列就可以进行编辑了,注意一定要配置usercomed 及staus 否则双击修改时就会报错. 而且要清除对应的工作区内容. 对应修改内容修改为展示的alv_Data 数据. 可以通过逻辑判断进行,给
CASE wa_fieldcat-fieldname. WHEN 'MATCODE' OR 'MATNAME' . wa_fieldcat-edit = 'X' . ENDCASE
赋值, 其中edit = 'X' 就使得对应列可编辑.
在工作应用中,会遇到当达到某种条件时,某个单元格可以编辑或者某个单元格不可以编辑.此时会跟单元格颜色一样.针对某个格子进行逻辑判断或者赋值.这里详细讲下,如何进行单元格编辑 .
*首先 在对应展示的数据内表中增加字段
TYPES : BEGIN OF ty_Data ,
doccode TYPE char20 ,
zrwoid TYPE char20 ,
matcode TYPE char20 ,
matname TYPE char20 ,
uom TYPE char20,
memo TYPE char20 ,
celtab TYPE lvc_t_styl, "控制字段可编辑的参数
END OF ty_Data .
* 第二步 定义结构中表结构
DATA:gwa_edit TYPE lvc_s_styl,
git_edit TYPE lvc_t_styl.
* 第三步 , 需要可以编辑的单元格进行逻辑判断
if 条件.
清空工作区
gwa_edit-fieldname = '列字段'.
gwa_edit-style = cl_gui_alv_grid=>mc_style_enabled."设置为可编辑
ELSe.
CLEAR: gwa_edit.
gwa_edit-fieldname = '列字段'.
gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled."设置为不可编辑
endif .
................
LOOP AT gt_Data INTO gs_Data .
IF gs_Data-UOM = '双'.
CLEAR: gwa_edit.
gwa_edit-fieldname = 'UOM'.
gwa_edit-style = cl_gui_alv_grid=>mc_style_enabled."设置为可编辑
ELSe.
CLEAR: gwa_edit.
gwa_edit-fieldname = 'UOM'.
gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled."设置为不可编辑
ENDIF.
APPEND gwa_edit TO GS_data-celtab .
MODIFY gt_Data FROM gs_Data .
ENDLOOP.
......................
结果展示
在工作中ALV数据内容编辑是经常使用的一种方式,此时就需要我们能够熟练使用对应的技术.此篇文章中介绍了两种必会的alv可编辑案例.希望能够帮助大家.
立身以学为先,立学以读书为本. 今天的不开心,就到此为止吧 ,好好读书好好学习.