最近研究了下可编辑问题 参考了网上很多前辈的经验 非常感谢!
现在想到的如下三个方法 一个是tablecontrol的
这个需要注意的问题是在何时何地做同步
对于alv的 这里具体讲一下
【方法一】FUNCTION 'REUSE_ALV_GRID_DISPLAY'
(先说下还有对应的list函数 就是 把grid 改为list)
对于list和grid 这两种
在界面上看的话
alv grid 是这个参数 wa_field-edit = 'X'.
alv list 是 wa_field1-INPUT = 'X' .
但是编辑以后想让编辑的值和内表关联起来
grid 方式的 还需要有 看如下代码的
DATA: it_sort TYPE slis_t_sortinfo_alv,
ls_sort TYPE slis_sortinfo_alv.
DATA LC_GLAY TYPE LVC_S_GLAY.
LC_GLAY-EDT_CLL_CB = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "
EXPORTING
i_callback_program = g_repid
I_GRID_SETTINGS = LC_GLAY
it_fieldcat = it_field
is_layout = gs_layout
i_callback_pf_status_set = 'MENU_SET'
i_callback_user_command = 'EXECUTE_COMMAND'
* it_sort = it_sort
i_save = 'A'
TABLES
t_outtab = bankt.
这样就可以保证值是修改的了
对于 list方式的 我未找到相应的办法 这样只能假的edit了
【方法二】
FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
用这个方法 可以不加那个参数 直接完成了 edit与 内表的联系
DATA: it_sort TYPE slis_t_sortinfo_alv,
ls_sort TYPE slis_sortinfo_alv.
DATA LC_GLAY TYPE LVC_S_GLAY.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = g_repid
* i_callback_user_command = 'USER_COMMAND'
* is_layout_lvc = gd_layout
it_fieldcat_lvc = it_field1
* is_layout = gd_layout
* it_fieldcat = it_fieldcat
i_save = 'X'
TABLES
t_outtab = bankt
EXCEPTIONS
program_error = 1
OTHERS = 2.
总之这两个方法都能完成alv的编辑
源码如下
REPORT zrf006ttt.
TABLES :bseg,zbank.
DATA: ok_code LIKE sy-ucomm.
DATA jine LIKE bsad-wrbtr.
DATA jine0 LIKE bsad-wrbtr.
DATA:BEGIN OF itabup OCCURS 0,
err(300),
END OF itabup.
DATA text(15).
DATA :BEGIN OF itabbank OCCURS 0 ,
banks(10),
cheque(10),
cdatum LIKE sy-datum,
wrbtr(15),
datum LIKE sy-datum,
name LIKE sy-uname,
hkont LIKE bseg-hkont,
END OF itabbank.
DATA bankt TYPE TABLE OF zbank WITH HEADER LINE.
DATA: long TYPE i,banlance TYPE i.
DATA lines TYPE i.
DATA count TYPE i.
DATA wa TYPE zbank.
DEFINE add_field.
wa_field-fieldname = &1.
wa_field-reptext_ddic = &2.
append wa_field to it_field.
END-OF-DEFINITION.
DEFINE add_field1.
wa_field1-fieldname = &1.
wa_field1-scrtext_m = &2.
append wa_field1 to it_field1.
END-OF-DEFINITION.
TYPE-POOLS slis.
DATA: gs_layout TYPE slis_layout_alv.
DATA: g_repid TYPE sy-repid.
DATA: it_field TYPE slis_t_fieldcat_alv.
DATA: wa_field TYPE slis_fieldcat_alv.
DATA: it_field1 TYPE lvc_t_fcat."slis_t_fieldcat_alv.
DATA: wa_field1 TYPE lvc_s_fcat."slis_fieldcat_alv.
g_repid = sy-repid.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
*PARAMETERS: upload RADIOBUTTON GROUP typ USER-COMMAND sele.
*PARAMETERS: check RADIOBUTTON GROUP typ .
PARAMETERS: maintain RADIOBUTTON GROUP typ.
PARAMETERS: test RADIOBUTTON GROUP typ DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
if test = 'X'.
perform out.
else.
perform out1.
endif.
form out.
select * from zbank into corresponding fields of table bankt." where del is null AND MeMO = ''.
wa_field-fieldname = 'DEL'.
wa_field-reptext_ddic = 'sel'.
wa_field-checkbox = 'X'.
wa_field-edit = 'X'.
* wa_field-INPUT = 'X' .
append wa_field to it_field..
clear wa_field.
wa_field-fieldname = 'BANKS'.
wa_field-reptext_ddic = 'banks'.
wa_field-edit = 'X'.
* wa_field-INPUT = 'X' .
append wa_field to it_field..
clear wa_field.
* gs_layout-box_tabname = ''.
* add_field 'BANKS' 'banks'.
add_field 'CDATUM' 'day'.
add_field 'CHEQUE' 'cheque'.
add_field 'WRBTR' 'money'.
add_field 'DATUM' 'day upload'.
add_field 'NAME' 'persorn upload'.
data: it_sort type slis_t_sortinfo_alv,
ls_sort type slis_sortinfo_alv.
data lc_glay type lvc_s_glay.
lc_glay-edt_cll_cb = 'X'.
call function 'REUSE_ALV_GRID_DISPLAY' "
exporting
i_callback_program = g_repid
i_grid_settings = lc_glay
it_fieldcat = it_field
is_layout = gs_layout
i_callback_pf_status_set = 'MENU_SET'
i_callback_user_command = 'EXECUTE_COMMAND'
* it_sort = it_sort
i_save = 'A'
tables
t_outtab = bankt.
endform. "out
*&---------------------------------------------------------------------*
*& Form out
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form out1.
select * from zbank into corresponding fields of table bankt ."where del is null AND MeMO = ''.
wa_field1-fieldname = 'DEL'.
wa_field1-scrtext_m = 'sel'.
wa_field1-checkbox = 'X'.
wa_field1-edit = 'X'.
* wa_field1-INPUT = 'X' .
append wa_field1 to it_field1.
clear wa_field1.
* gs_layout-box_tabname = ''.
wa_field1-fieldname = 'BANKS'.
wa_field1-scrtext_m = 'BANKS'.
wa_field1-edit = 'X'.
* wa_field1-INPUT = 'X' .
append wa_field1 to it_field1.
clear wa_field1.
* add_field1 'BANKS' 'banks'.
add_field1 'CDATUM' 'day'.
add_field1 'CHEQUE' 'cheque'.
add_field1 'WRBTR' 'money'.
add_field1 'DATUM' 'day upload'.
add_field1 'NAME' 'persorn upload'.
data: it_sort type slis_t_sortinfo_alv,
ls_sort type slis_sortinfo_alv.
data lc_glay type lvc_s_glay.
call function 'REUSE_ALV_GRID_DISPLAY_LVC'
exporting
i_callback_program = g_repid
* i_callback_user_command = 'USER_COMMAND'
* is_layout_lvc = gd_layout
it_fieldcat_lvc = it_field1
* is_layout = gd_layout
* it_fieldcat = it_fieldcat
i_save = 'X'
tables
t_outtab = bankt
exceptions
program_error = 1
others = 2.
loop at bankt.
write: / bankt-banks.
endloop.
endform. "out
form menu_set using rt_extab type slis_t_extab..
set pf-status 'STANDARD6'. "定义屏幕状态,然后在里面定义自己的按钮
endform.
form execute_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield. "响应ALV点击自定义按钮之后的事件
case r_ucomm.
when 'SAVE'. "在set pf-status.屏幕状态里面定义的
loop at bankt where del = 'X'.
modify zbank from bankt.
endloop.
loop at bankt.
write: / bankt-banks.
endloop.
write 'delete ok!'.
endcase.
endform.