abap alv 更改数据_ABAP DEMO ALV-监听数据修改

*&---------------------------------------------------------------------**& Report YDEMO_006*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*

REPORTYDEMO_006.DATA: BEGIN OF itab OCCURS 0,

mblnrLIKE mseg-mblnr ,

kostlLIKE mseg-kostl ,END OFitab .DATA: ok_code LIKE sy-ucomm .DATA: l_valid(1) TYPEc.DATA: go_grid TYPE REF TOcl_gui_alv_grid,

go_custom_containerTYPE REF TOcl_gui_custom_container.DATA: gt_fieldcat TYPElvc_t_fcat,

gs_fieldcatTYPElvc_s_fcat,

gs_variantTYPEdisvariant ,

gt_filtTYPElvc_t_filt,

gs_filtTYPElvc_s_filt,

slaTYPElvc_s_layo .CLASS lcl_event_receiver DEFINITIONDEFERRED .DATA: event_receiver TYPE REF TOlcl_event_receiver.*---------------------------------------------------------------------**CLASS lcl_event_receiver DEFINITION*---------------------------------------------------------------------*

CLASS lcl_event_receiver DEFINITION.PUBLIC SECTION.METHODShandle_data_changedFOR EVENT data_changed OFcl_gui_alv_gridIMPORTINGer_data_changed.ENDCLASS. "lcl_event_receiver DEFINITION

*---------------------------------------------------------------------**CLASS lcl_event_receiver IMPLEMENTATION*---------------------------------------------------------------------*

CLASS lcl_event_receiver IMPLEMENTATION.METHODhandle_data_changed.BREAKLZH.PERFORM handle_data_changed USINGer_data_changed.ENDMETHOD. "handle_data_changed

ENDCLASS. "lcl_event_receiver IMPLEMENTATION

INITIALIZATION.PERFORM fieldcat_init USINGgt_fieldcat[].START-OF-SELECTION.CALL SCREEN 0100.*&---------------------------------------------------------------------**& Module USER_COMMAND_0100 INPUT*&---------------------------------------------------------------------*

MODULEuser_command_0100 INPUT.CASEok_code.

WHEN‘BACK‘ OR ‘EXIT‘.LEAVE PROGRAM.

WHEN‘ENTE‘.PERFORMenter.

WHEN‘CHANGE‘.PERFORMchange.ENDCASE.CLEARok_code .ENDMODULE. "USER_COMMAND_0100 INPUT

*&---------------------------------------------------------------------**& Form load_data_into_grid*&---------------------------------------------------------------------*

FORMload_data_into_grid.SELECT * FROM mseg INTO CORRESPONDING FIELDS OF TABLEitab

UPTO 20ROWS .

sla-cwidth_opt = ‘X‘.

sla-zebra = ‘X‘.CALL METHOD go_grid->set_table_for_first_displayEXPORTINGis_variant=gs_variant

i_save= ‘A‘is_layout=slaCHANGINGit_outtab=itab[]

it_fieldcatalog=gt_fieldcat[]EXCEPTIONSinvalid_parameter_combination= 1program_error= 2too_many_lines= 3OTHERS= 4.CALL METHOD go_grid->set_ready_for_input "处于编辑状态

EXPORTINGi_ready_for_input= 1.CALL METHOD cl_gui_control=>set_focus "设置焦点在go_grid 上

EXPORTINGcontrol=go_grid .ENDFORM. "load_data_into_grid

*&--------------------------------------------------------------------**& Form fieldcat_init*&--------------------------------------------------------------------*

FORM fieldcat_init USING rt_fieldcat TYPElvc_t_fcat.DATA: ls_fieldcat TYPElvc_s_fcat.PERFORM frm_catlg_set USING:‘MBLNR‘ ‘X‘ ‘凭证‘ ‘‘ ‘MBLNR‘ ‘MSEG‘rt_fieldcat,‘KOSTL‘ ‘‘ ‘成本中心‘ ‘X‘ ‘‘ ‘‘rt_fieldcat.ENDFORM. "fieldcat_init

*---------------------------------------------------------------------**FORM frm_catlg_set **---------------------------------------------------------------------*

FORM frm_catlg_set USINGp_field p_key p_text p_edit ref_f ref_t

rt_fieldcatTYPElvc_t_fcat .DATA: tmp_fieldcat TYPElvc_s_fcat.

tmp_fieldcat-fieldname =p_field.

tmp_fieldcat-key =p_key .

tmp_fieldcat-scrtext_l =p_text.

tmp_fieldcat-edit =p_edit.

tmp_fieldcat-ref_field =ref_f.

tmp_fieldcat-ref_table =ref_t.APPEND tmp_fieldcat TOrt_fieldcat .CLEARtmp_fieldcat .ENDFORM. "FRM_CATLG_SET

*&---------------------------------------------------------------------**& Form change*&---------------------------------------------------------------------*

FORMchange .DATA: ls_stable TYPElvc_s_stbl.

ls_stable-row = ‘X‘.

ls_stable-col = ‘X‘.IF go_grid->is_ready_for_input( ) = 0.CALL METHOD go_grid->set_ready_for_inputEXPORTINGi_ready_for_input= 1.ELSE.CALL METHOD go_grid->check_changed_data "把修改的内容更改到内表里

IMPORTINGe_valid=l_valid.CALL METHOD go_grid->set_ready_for_inputEXPORTINGi_ready_for_input= 0.CALL METHOD go_grid->refresh_table_displayEXPORTINGis_stable=ls_stableEXCEPTIONSfinished= 1OTHERS= 2.ENDIF.ENDFORM. "change

*&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------*

MODULE status_0100 OUTPUT.SET PF-STATUS ‘MAIN100‘.

gs_variant-report = sy-repid.IF go_grid IS INITIAL.CREATE OBJECTgo_gridEXPORTINGi_parent= cl_gui_container=>screen0.CREATE OBJECTevent_receiver.SET HANDLER event_receiver->handle_data_changed FORgo_grid.IF sy-batch IS INITIAL.CALL METHOD go_grid->register_edit_eventEXPORTINGi_event_id= cl_gui_alv_grid=>mc_evt_enter. "回车时触发*i_event_id = cl_gui_alv_grid=>mc_evt_modified. "单元格更改触发

ENDIF.PERFORMload_data_into_grid.ENDIF.ENDMODULE. "STATUS_0100 OUTPUT

*&---------------------------------------------------------------------**& Form ENTER*&---------------------------------------------------------------------*

FORMenter .DATA: ucomm LIKE sy-ucomm.

ucomm= ‘&DATA_SAVE‘."‘&REFRESH‘.

CALL METHOD go_grid->set_function_codeCHANGINGc_ucomm=ucomm.ENDFORM. "ENTER

*&---------------------------------------------------------------------**& Form HANDLE_DATA_CHANGED*&---------------------------------------------------------------------*

FORM handle_data_changed USING data_changed TYPE REF TOcl_alv_changed_data_protocol..FIELD-SYMBOLS: TYPE STANDARD TABLE, TYPElvc_t_modi , TYPElvc_s_modi , LIKE LINE OFitab.BREAKLZH.IF NOT data_changed->mp_mod_rows IS INITIAL.ASSIGN data_changed->mp_mod_rows->* TO .ASSIGN data_changed->mt_mod_cells TO .LOOP AT ASSIGNING .IF -kostl = ‘ABC‘.READ TABLE INDEX sy-tabix ASSIGNING .CALL METHOD data_changed->add_protocol_entryEXPORTINGi_msgid= ‘OO‘i_msgty= ‘E‘i_msgno= ‘000‘i_msgv1= ‘不可以为ABC‘i_fieldname= ‘KOSTL‘i_row_id= -row_id*i_tabix = tabix

.ENDIF.ENDLOOP.ENDIF.ENDFORM. "HANDLE_DATA_CHANGED

*************************************************************************5、拓展内容*CL_ALV_CHANGED_DATA_PROTOCOL参数的常用方法和属性*

*方法 用途*MODIFY_CELL 修改指定位置单元格的值*GET_CELL_VALUE 获取单元格的值*ADD_PROTOCOL_ENTRY 弹出一个消息,必须使用系统标准的消息类*MODIFY_PROTOCOL_ENTRY 修改消息*PROTOCOL_IS_VISIBLE 是否显示错误信息提示*REFRESH_PROTOCOL 删除错误消息*

*属性 用途*MT_PROTOCOL LOGs*MT_MOD_CELLS 更新的单元格信息*MP_MOD_ROWS 更新了的行的信息*MT_GOOD_CELLS 正确的CELL的值*MT_DELETED_ROWS 被删除的行信息*MT_INSERTED_ROWS 新插入的行信息

*PS:alv编辑字段的检查,通常包括输入字段的重复性检查和存在性检查,想一想怎么实现************************************************************************

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值