Code: Alles auswählen.
* Zuerst Flushen
CALL METHOD cl_gui_cfw=>flush. Code: Alles auswählen.
WHEN 'INBEA'. Nachdem Du etwas von subscreen erzählst - ich aber den Aufruf von Deiner Form nicht sehe. Kann es sein, dass Du mit jedem PBO eine neue Instanz Deines ALV-Grids erzeugst?Torsten hat geschrieben:Hallo,
das mit dem 2. Aufruf brauche ich natürlich nicht. Da hast du recht. Nur ich komme bis dahin gar nicht, da die Tabelle i_rows trotz Markierung leer ist. Das "Flushen" passiert ja auch erst danach!
Ich weiß jetzt nur nicht, ob es an dem Subscreen liegt, wo ich das Grid_Control aufrufe, oder nicht??
soweit ich sehen kann, ist der Aufruf nicht gekapselt. Mit jedem Aufruf der Form erzeugst Du ein neue Instanz. Ich vermute, dass beim prozessieren des Eventhandlers bereits die neue Instanz erzeugt wird. Das solltest Du per Debugging prüfen.Torsten hat geschrieben:Hallo,
also ich erzeuge das Grid in einem PAI-Modul, wie man unten erkennt.
PAI-Modul:
MODULE user_command_0200 INPUT.
...
WHEN 'POSI'.
tab1-activetab = 'POSI'.
scrnr = '0230'.
perform create_alv_grid_aufpos.
...
Was auch komisch ist, daß man bei einem normalen Programm ohne Subscreen "Scrollen" kann während
man im Programm mit Subscreen gar nicht diese
Möglichkeit hat. Das Scrollen müßte doch defaultmäßig
genauso erscheinen, wenn der Container zu klein ist?!
Code: Alles auswählen.
SET HANDLER lcl_event_receiver_aupos=>handle_user_command lcl_event_receiver_aupos=>handle_menu_button lcl_event_receiver_aupos=>handle_toolbar
*lcl_event_receiver=>handle_double_klick
FOR ALL INSTANCES. Code: Alles auswählen.
SET HANDLER lcl_event_receiver_aupos=>handle_user_command FOR grid1.
SET HANDLER lcl_event_receiver_aupos=>handle_menu_button FOR grid1.
SET HANDLER lcl_event_receiver_aupos=>handle_toolbar FOR grid1. Code: Alles auswählen.
***********************************************************************
* Klassen Definition für Ereignisse in der GUI-INSTANZ
***********************************************************************
CLASS lcl_event DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
on_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
on_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
CLASS lcl_event IMPLEMENTATION.
* Der Toolbar wird ein eigenes Button hinzugefügt
METHOD on_toolbar.
DATA: wa_knopf TYPE stb_button.
wa_knopf-icon = icon_flight.
wa_knopf-function = 'USER'.
APPEND wa_knopf TO e_object->mt_toolbar.
ENDMETHOD.
* Benutzer hat das eigenes Button ausgwählt
METHOD on_user_command.
DATA: it_row_ind TYPE lvc_t_row,
it_row_no TYPE lvc_t_roid.
DATA: wa_row_ind TYPE lvc_s_row,
wa_row_no TYPE lvc_s_roid.
CASE e_ucomm.
WHEN 'USER'.
* Die Methode mit der Instanz des ALV mit den markierten Zeilen aufrufen
CALL METHOD r_alvg->get_selected_rows
IMPORTING
et_index_rows = it_row_ind
et_row_no = it_row_no.
* Jetzt enthalten beide Tabellen die Indexe der markierten Zeilen
ENDCASE.
ENDMETHOD.
ENDCLASS.
.
.
.
* Beim erzeugen des ALV in dem Zeilen markiert werden
MODULE init_process OUTPUT.
* Einmal Erstellung der Container Instanz
CHECK r_cont IS INITIAL.
CREATE OBJECT r_cont
EXPORTING
container_name = 'CONT'.
IF sy-subrc <> 0.
MESSAGE a999 WITH 'Fehler beim Erzeugen des Containers'.
ENDIF.
* Einmal Erstellung der ALV Instanz
CHECK r_alvg IS INITIAL.
CREATE OBJECT r_alvg
EXPORTING
i_parent = r_cont.
IF sy-subrc <> 0.
MESSAGE a999 WITH 'Fehler beim Erzeugen des ALVGRID'.
ENDIF.
* Registrieren der Ereignisse
SET HANDLER: lcl_event=>on_toolbar FOR r_alvg,
lcl_event=>on_user_command FOR r_alvg.
* Erster Aufruf ALV
PERFORM alv_fieldcat.
PERFORM alv_layout.
CALL METHOD r_alvg->set_table_for_first_display
EXPORTING
i_save = 'A'
is_layout = wa_layo
CHANGING
it_outtab = it_list
it_fieldcatalog = it_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE a999 WITH 'Fehler beim Aufruf des ALVGRID'.
ENDIF.
ENDMODULE. " status_0100 OUTPUT