Grid ABAP Alv网格-标题单击事件

Grid ABAP Alv网格-标题单击事件,grid,abap,alv,Grid,Abap,Alv,是否可以捕获ALV网格列标题上的单键单击?我知道捕捉双击、为单元格上的热点创建事件的可能性。我还没有找到一个标题点击。(我不想提供排序或任何其他数据选项)。我唯一找到的是事件单击cl\u gui\u alv\u网格的标题,但它受到保护,因此我无法提供我的操作。 提前谢谢你 是的。下面是如何使用CL\u GUI\u ALV\u GRID: 设置ALV布局设置SGL\u CLK\u HD='X'(这将根据单击的列激活行排序) 使用您自己的代码重新定义排序行为,方法是在用户命令之前处理事件,并使用方

是否可以捕获ALV网格列标题上的单键单击?我知道捕捉双击、为单元格上的热点创建事件的可能性。我还没有找到一个标题点击。(我不想提供排序或任何其他数据选项)。我唯一找到的是事件单击cl\u gui\u alv\u网格的标题,但它受到保护,因此我无法提供我的操作。
提前谢谢你

是的。下面是如何使用
CL\u GUI\u ALV\u GRID

  • 设置ALV布局设置
    SGL\u CLK\u HD='X'
    (这将根据单击的列激活行排序)
  • 使用您自己的代码重新定义排序行为,方法是在用户命令之前处理事件,并使用方法设置新命令
  • 在事件期间定义所需的新行为
    USER\u命令
  • 使用方法
    GET\u SELECTED\u COLUMNS
    了解单击了哪个列
(注:如果有人想知道,
CL\u GUI\u ALV\u GRID
有一个事件
CLICK\u COL\u HEADER
,但它从未被触发)

这是一个演示(同样发布在下面的Raymond答案中):


“受保护”意味着您可以通过创建一个从
CL\u GUI\u ALV\u GRID
继承的本地类并对该本地类中的事件作出反应来使用它。如果您需要单次单击,则应使用热点,但热点是单次单击特定单元格的事件,而不是标题。。
CLASS lcl_alv DEFINITION.
  PUBLIC SECTION.
    METHODS constructor.
    METHODS free.
    METHODS on_before_user_command FOR EVENT before_user_command OF cl_gui_alv_grid IMPORTING e_ucomm.
    METHODS on_user_command FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm.
    DATA go_alv TYPE REF TO cl_gui_alv_grid.
    DATA gt_sflight TYPE TABLE OF sflight.
ENDCLASS.

CLASS lcl_alv IMPLEMENTATION.

  METHOD constructor.
    CREATE OBJECT go_alv
      EXPORTING
        i_parent = cl_gui_container=>screen0.

    SET HANDLER on_user_command FOR go_alv.
    SET HANDLER on_before_user_command FOR go_alv.

    SELECT * FROM sflight INTO TABLE gt_sflight.
    go_alv->set_table_for_first_display(
        EXPORTING
          i_structure_name = 'SFLIGHT'
          is_layout = VALUE #( sgl_clk_hd = abap_true )
        CHANGING
          it_outtab = gt_sflight ).
  ENDMETHOD.

  METHOD free.
    go_alv->free( ).
  ENDMETHOD.

  METHOD on_before_user_command.
    CASE e_ucomm.
      WHEN go_alv->mc_fc_sort.
        go_alv->set_user_command( i_ucomm = 'ZZSORT' ).
    ENDCASE.
  ENDMETHOD.

  METHOD on_user_command.
    CASE e_ucomm.
      WHEN 'ZZSORT'.
        go_alv->get_selected_columns( IMPORTING et_index_columns = data(columns) ).
        MESSAGE |Columns: { COND #( WHEN lines( columns ) > 0 THEN columns[ 1 ]-fieldname ) }| TYPE 'I'.
    ENDCASE.
  ENDMETHOD.

ENDCLASS.

DATA go_alv TYPE REF TO lcl_alv.

PARAMETERS dummy.

AT SELECTION-SCREEN OUTPUT.
  IF go_alv IS NOT BOUND.
    go_alv = NEW lcl_alv( ).
  ENDIF.

AT SELECTION-SCREEN ON EXIT-COMMAND.
  go_alv->free( ).
  FREE go_alv.