You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改ALV双击事件 实现任意单元格双击显示行详情

问题根因

原代码仅支持双击CARRID字段触发明细展示,是因为双击事件的处理方法中写死了字段校验逻辑:

CHECK ev_field_name = 'CARRID'.

ABAP中CHECK语句的逻辑是:若后续条件不成立,立刻终止当前方法的执行。这就导致只有双击的字段名匹配CARRID时,才会往下执行读取行数据、弹明细的逻辑,双击其他字段会直接退出方法,不会有任何响应。

修改方式

直接注释或删除上述CHECK校验语句即可,其余逻辑无需调整。修改后的完整可运行代码如下:

CLASS lcl_handle_dc DEFINITION.
  PUBLIC SECTION.
  METHODS double_click
        FOR EVENT double_click OF if_salv_gui_table_display_opt
        IMPORTING ev_field_name eo_row_data.
ENDCLASS.

CLASS lcl_handle_dc IMPLEMENTATION.
  METHOD double_click.
    DATA: ls_sflight TYPE sflight.
* 移除字段限制,任意单元格双击均执行后续逻辑
*   CHECK ev_field_name = 'CARRID'.
* 读取双击行的全字段数据
    eo_row_data->get_row_data(
      EXPORTING
        iv_request_type = if_salv_gui_selection_ida=>cs_request_type-all_fields
      IMPORTING
        es_row = ls_sflight ).
* 展示当前行明细
    cl_salv_ida_show_data_row=>display( iv_text = 'Flight Row Info' is_data = ls_sflight ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
DATA: lr_salv TYPE REF TO if_salv_gui_table_ida,
      lr_handle TYPE REF TO lcl_handle_dc.
cl_salv_gui_table_ida=>create(
  EXPORTING
    iv_table_name       =  'SFLIGHT'
  RECEIVING
    ro_alv_gui_table_ida = lr_salv ).

DATA(lr_disp) = lr_salv->display_options( ).
* 启用双击功能
lr_disp->enable_double_click( ).
CREATE OBJECT lr_handle.
SET HANDLER lr_handle->double_click FOR ALL INSTANCES.

* 加载显示ALV
lr_salv->fullscreen( )->display( ).
效果说明

修改后激活程序运行,双击ALV表格内任意单元格,都会自动读取对应行的完整数据并弹出明细窗口,不再限制触发字段。

内容的提问来源于stack exchange,提问作者Abapito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:12:28