Genau hier liegt das Problem, da ich nicht weiß, wie man "Knöpfe nur anhängt, wenn das Grid editierbar ist".Du musst in der Methode die die Toolbar aufbaut (also auf das Event Toolbar reagiert) eine Abfrage einbauen ob das Grid gerade editierbar oder nicht editierbar ist und die Knöpfe nur anhängen wenn das Grid editierbar ist.
Code: Alles auswählen.
methods handle_toolbar for event toolbar of cl_gui_alv_grid
importing o_object e_interactive.
Code: Alles auswählen.
CLASS lcl_gui_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
PUBLIC SECTION.
METHODS: pbl_optimize_all_columns.
METHODS: pbl_set_toolbar_buttons
IMPORTING toolbar_table TYPE ttb_button.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS lcl_gui_alv_grid
*---------------------------------------------------------------------*
CLASS lcl_gui_alv_grid IMPLEMENTATION.
METHOD pbl_optimize_all_columns.
CALL METHOD me->optimize_all_cols
EXPORTING
include_header = 1
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDMETHOD.
METHOD pbl_set_toolbar_buttons.
CALL METHOD me->set_toolbar_buttons
EXPORTING
toolbar_table = toolbar_table.
ENDMETHOD.
ENDCLASS.
Hmmmm.... ein Effekt den ich bislang nicht beobachten konnte... bei mir bleiben zur Laufzeit die Buttons so erhalten, wie einmal eingestellt. Auch baue ich die Objekte etc. pp. immer nur einmal auf und erzeuge somit keinen Refresh.Flo hat geschrieben:.... die Toolbar wird nach jedem Grid Refresh neu aufgebaut, also alle angehängten Knöpfe sind weg und werden durch den event_handler wieder neu angehängt.....
Code: Alles auswählen.
gt_toolbar type table of stb_button
...
data:
ls_toolbar type stb_button.
clear ls_toolbar.
move 3 to ls_toolbar-butn_type.
append ls_toolbar to lt_toolbar.
clear ls_toolbar.
move 'INS_ROW' to ls_toolbar-function.
move icon_insert_row to ls_toolbar-icon.
move space to ls_toolbar-disabled.
move 'Insert Row' to ls_toolbar-quickinfo.
append ls_toolbar to lt_toolbar.
clear ls_toolbar.
move 'DEL_ROW' to ls_toolbar-function.
move icon_delete_row to ls_toolbar-icon.
move space to ls_toolbar-disabled.
move 'Delete Rows' to ls_toolbar-quickinfo.
append ls_toolbar to lt_toolbar.
Code: Alles auswählen.
form handle_toolbar using i_object type ref to cl_alv_event_toolbar_set
i_interactive.
data:
ls_toolbar type stb_button,
lv_ready type i,
lv_index type i.
call method gr_alvgrid->is_ready_for_input
receiving
ready_for_input = lv_ready.
if lv_ready EQ 1.
loop at i_object->mt_toolbar into ls_toolbar.
if ls_toolbar-function EQ '&REFRESH'.
lv_index = sy-tabix + 1.
insert lines of gt_toolbar into i_object->mt_toolbar
index lv_index.
endif.
endloop.
endif.
endform.