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