关于alv可编辑问题

最近研究了下可编辑问题 参考了网上很多前辈的经验 非常感谢!

现在想到的如下三个方法 一个是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的编辑

image

 

 

源码如下

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值