因此,在参数TOOLBAR
事件内部有一个表,我可以访问该表来手动更改所有按钮。CL_GUI_ALV_GRID
E_OBJECT
MT_TOOLBAR
有没有比在工具栏事件中像自定义按钮一样简单地创建它们更好的方法来包含/排除工具栏中的标准按钮?
类似于REUSE_ALV_GRID_DISPLAY
在课堂CL_GUI_ALV_GRID
上也有一种方法。
定义一个类型的表UI_FUNCTIONS
和一个类型的工作区UI_FUNC
:
data: lt_exclude type ui_functions,
ls_exclude type ui_func.
将要隐藏的函数的属性附加到表中:
ls_exclude = cl_gui_alv_grid=>mc_fc_sum.
append ls_exclude to lt_exclude.
标准功能的属性都以前缀 开头MC_FC_
,此外,MC_MB_
工具栏中还有整个菜单的前缀。
set_table_for_first_display
使用带参数的方法传递表格it_toolbar_excluding
如果您REUSE_ALV_GRID_DISPLAY
在代码中使用,这可能对您有所帮助:
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = 'ZPROGRAM'
i_callback_pf_status_set = 'SET_PF_STATUS'
it_fieldcat = it_fieldcat
tables
t_outtab = gt_itab.
你SET_PF_STATUS
应该是这样的,以便消除一些你想要的按钮。在此示例中,我将删除“SORT_UP”按钮。
form set_pf_status using rt_extab type slis_t_extab.
data: lv_flag VALUE 'X'.
if lv_flag is not INITIAL.
append '&OUP' to rt_extab.
endif.
set pf-status 'STANDARD' excluding rt_extab.
endform. "set_pf_status
希望对您有所帮助。
塔尔哈
类 lcl_event_alv 定义。公共部分。
methods handle_toolbar for event toolbar of cl_gui_alv_grid
importing e_object e_interactive sender.
类 lcl_event_alv 实现。
方法句柄工具栏。
delete e_object->mt_toolbar where function = '&LOCAL&INSERT_ROW' or function = '&LOCAL&DELETE_ROW'
or function = '&LOCAL&APPEND' or function = '&LOCAL©'
or function = '&LOCAL&PASTE' or function = '&LOCAL&CUT'
or function = '&LOCAL©_ROW' or function = '&LOCAL&CUT'.
最终方法。
数据:go_event 类型参考 lcl_event_alv。
create object go_event .
set handler go_event->handle_toolbar for go_grid1.
call method go_grid1->set_table_for_first_display
exporting
is_layout = gd_layout
is_variant = value disvariant( report = sy-repid handle = 'GO_GRID1' )
i_save = 'A'
changing
it_fieldcatalog = gt_fcat1
it_outtab = gt_items1.