abap - ALV 网格中的标题点击事件?
问题描述
是否可以单击 ALV Grid 列标题上的单个按钮?我知道捕捉 double_click 的可能性,为单元格上的热点创建事件。我还没有找到一个标题点击。(我不想提供排序或任何其他数据选项)。我发现的唯一一件事是事件click_col_header OF cl_gui_alv_grid但它受到保护,因此我无法提供我的操作。先感谢您 !
解决方案
是的。以下是如何做到这一点CL_GUI_ALV_GRID
:
- 设置 ALV 布局设置
SGL_CLK_HD = 'X'
(这会激活基于单击的列的行排序) - 通过处理事件
BEFORE_USER_COMMAND
并使用方法设置新命令,使用您自己的代码重新定义排序行为SET_USER_COMMAND
- 定义您在活动期间想要的新行为
USER_COMMAND
- 使用方法
GET_SELECTED_COLUMNS
知道点击了哪一列
(PS:如果有人想知道,CL_GUI_ALV_GRID
有事件CLICK_COL_HEADER
,但从未触发)
这是一个演示(也发布在SAP 论坛的 Raymond 答案下方):
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.
推荐阅读
- qt - 使用鼠标区域或 DropArea 的 ListView 多选
- nuxt.js - 如何在 Nuxt 中将路由器内容渲染到 index.html
- javascript - 在页面加载 Javascript 时将 div 内容显示为默认值
- jenkins - 你能在一个 Jenkins 阶段加载一个 groovy 文件吗?运行函数;并使用 @groovy.transform.Field 在多个 Jenkins 阶段共享数据
- javascript - 状态变化未反映在 Next.Js 中的功能中
- sqlalchemy - SqlAlchemy:未定义此子句的布尔值
- c# - Resharper 打破了 Visual Studio 2019 的功能
- java - 如何获得 BigDecimal 中的确切值?
- windows - Icecast 和 SSL:自动 .pem 密码(Windows)
- r - 保持参与者内的估算值一致