ABAP->ALV->DATA_CHANGED事件

  "数据更改事件
  IS_EVENTS-NAME  = IS_EVENTS-FORM = 'DATA_CHANGED'.
  APPEND IS_EVENTS TO IT_EVENTS.
"单元格值修改回调设置,否则需要双击生效
  IS_GRID-EDT_CLL_CB  = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'FRM_USER_STATUS'
      I_CALLBACK_USER_COMMAND  = 'FRM_USER_COMMAND '
      "I_CALLBACK_TOP_OF_PAGE   = 'FRM_TOP_PAGE'
      IS_LAYOUT_LVC            = IS_LAYO
      IT_FIELDCAT_LVC          = IT_FIELD
      IT_EVENTS                = IT_EVENTS
      I_GRID_SETTINGS          = IS_GRID
      I_DEFAULT                = 'X'
      I_SAVE                   = 'A'
    TABLES
      T_OUTTAB                 = IT_ALV
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.
*&---------------------------------------------------------------------*
*& Form  data_changed
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM DATA_CHANGED USING PCL_DATA TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
  DATA CDAT TYPE C LENGTH 10.
  DATA LV_CHARG LIKE IS_ALV-CHARG_MJ.
  DATA(LT_MOD_CELL) = PCL_DATA->MT_MOD_CELLS .
  " MESSAGE '触发!' TYPE 'I'.
  LOOP AT LT_MOD_CELL INTO DATA(LS_MOD_CELL)."所有修改的单元格内容与行
    CLEAR LV_CHARG.
    CASE LS_MOD_CELL-FIELDNAME.
      WHEN 'CHK'."修改字段名
        "读取修改行
        READ TABLE IT_ALV INTO IS_ALV INDEX LS_MOD_CELL-ROW_ID.
        IF SY-SUBRC = 0.
          "修改后的值
          IS_ALV-CHK  = 'X'. 
        ENDIF.
    ENDCASE.

  ENDLOOP.
  DATA: IS_GRID TYPE  REF TO CL_GUI_ALV_GRID,
        Is_STBL TYPE  LVC_S_STBL.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = IS_GRID.
  IS_STBL-ROW = 'X'." 基于行稳定刷新
  IS_STBL-COL = 'X'." 基于列稳定刷新
  CALL METHOD IS_GRID->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE = Is_STBL.

ENDFORM.

### ABAP REUSE_ALV_GRID_DISPLAY_LVC `DATA_CHANGED` 事件处理 在ABAP中,当使用 `REUSE_ALV_GRID_DISPLAY_LVC` 方法展示数据时,可能会遇到 `DATA_CHANGED` 事件触发不正常的情况。此问题通常发生在用户修改表格中的某些单元格后,系统未能正确识别这些更改并执行相应的逻辑。 为了确保 `DATA_CHANGED` 能够被正确捕获,在调用 `REUSE_ALV_GRID_DISPLAY_LVC` 函数模块之前,需配置特定的网格设置选项[^2]: ```abap DATA: ls_setting TYPE lvc_s_glay. ls_setting-edt_cll_cb = 'X'. ``` 上述代码片段设置了允许编辑功能,使得 ALV 表格内的单元格可以响应用户的输入操作,并能激活后续的数据变更检测机制。 一旦完成了必要的初始化工作,则可以通过定义一个自定义的方法来接收来自 `DATA_CHANGED` 的回调通知。下面是一个简单的例子说明如何创建这样一个处理器函数: ```abap METHODS on_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING e_modified. ... ENDMETHOD. ``` 在这个方法内部,可以根据实际需求编写业务逻辑以应对不同类型的改动情况。例如验证新录入的信息是否合法、更新关联记录或是保存最新的状态到数据库等动作都可以在此处完成。 最后一步是在启动 ALV 显示前注册该监听器对象给对应的实例变量: ```abap SET HANDLER me->on_data_changed FOR go_alv_grid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' ... ENDMETHOD. ``` 通过这种方式就可以有效地监控和管理由终端用户引起的任何变动,从而保障应用程序的一致性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值