ALV OO检查单元格更新数据

原文地址: http://blog.csdn.net/bobking1983/archive/2007/04/23/1575361.aspx

ALV单元格设置为可输入后,通常我们需要对单元格输入的值做一个检查,一般来说用循环内表的方法可以实现上述操作,不过如果ALV中有大量数据,而我们只更新了少量的单元格数据,这样检查显得非常的麻烦,而且效率低下

ALV OO中我们可以通过DATA_CHANGE事件得到被修改的单元格的信息,利用这些信息我们可以很方便的对所填数据做检查,别且可以给用户相应的错误提示,以及自动修改单元格数据

1.       我们需要在处理事件的类中添加一个处理DATA_CHANGE事件的方法

Eg

CLASS lcl_alv_receiver DEFINITION DEFERRED.

 

CLASS lcl_alv_receiver DEFINITION.

  PUBLIC SECTION.

    ……..

    METHODS:

    handle_data_changed

        FOR EVENT data_changed OF cl_gui_alv_grid

            IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.

ENDCLASS.                    "lcl_event_receiver DEFINITION

 

2.       初始化ALV后为lcl_alv_receiver类注册一个DATA_CHANGED事件

Eg

CALL METHOD g_grid->set_table_for_first_display

    EXPORTING

      i_save          = x_save

      is_variant       = ls_layout

      is_layout        = is_layout

    CHANGING

      it_fieldcatalog   = it_fieldcat

      it_outtab       = lt_zqsdmx[].

SET HANDLER g_alv_application->handle_data_changed FOR g_grid.

CALL METHOD g_grid->register_edit_event  注册更新事件

    EXPORTING

      i_event_id = cl_gui_alv_grid=>mc_evt_enter .

其中i_event_id = cl_gui_alv_grid=>mc_evt_enter 表示在单元格修改后回车或者执行其他操作时触发事件,此类型可用于多个单元格修改后一起检查修改的值

i_event_id = cl_gui_alv_grid=>mc_evt_modified 表示单光标焦点移开被修改单元格后既触发事件,此类型可用于每个每个单元个的实时更新检查

  3.实现lcl_alv_receiver类的handle_data_changed方法,其中一些常用的一些属性方法我会在后附表列出

Eg

CLASS lcl_alv_receiver IMPLEMENTATION.

  METHOD handle_toolbar.

    METHOD handle_data_changed.

    PERFORM handle_data_changed USING er_data_changed.

  ENDMETHOD.                    "handle_data_changed

ENDCLASS.               "lcl_ALV_event_receiver

 

*&---------------------------------------------------------------------*

*&      Form  handle_data_changed

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_ER_DATA_CHANGED  text

*----------------------------------------------------------------------*

FORM handle_data_changed  USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.

*如果更新的reason字段长度小于10为则提示用户填入字符数不能低于10

  DATA:mod_data TYPE lvc_t_modi,

       wa_mod_data TYPE lvc_s_modi.

  mod_data = p_er_data_changed->mt_mod_cells.

  LOOP AT mod_data INTO wa_mod_data WHERE fieldname = 'ZRESON'.

    IF STRLEN( wa_mod_data-value ) < 10.

      CALL METHOD p_er_data_changed->add_protocol_entry

        EXPORTING

          i_msgid     = '00'

          i_msgty     = 'E'

          i_msgno     = '001'

          i_msgv1     = '长度必须大于10 '

          i_fieldname = wa_mod_data-fieldname.

 

*如果长度小于10,则将字段内容更新为长都无法确定

      CALL METHOD p_er_data_changed->modify_cell

        EXPORTING

          i_row_id    = wa_mod_data-row_id

          i_fieldname = wa_mod_data-fieldname.

    ENDIF.

  ENDLOOP.

ENDFORM.                    " handle_data_changed

附:

DATA_CHANGED 事件ER_DATA_CHANGED参数的常用方法和属性一览表

方法

名称

用途

modify_cell

修改指定位置单元格的值

add_protocol_entry

弹出一个消息,必须使用系统标准的消息类

protocol_is_visible

是否显示错误信息提示

refresh_protocol

删除错误消息

属性

名称

用途

MT_MOD_CELLS

更新的单元格信息

MP_MOD_ROWS

更新的行信息

MT_GOOD_CELLS

更新的单元格信息,系统按照标准格式对字段内容转换后的值

MT_DELETED_ROWS

被删除的行信息

MT_INSERTED_ROWS

新插入的行信息

 

修改单元格

由于输入长度限制小于10,弹出提示窗口,并且自动更新单元格内容

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值