gegeben sei ein ALV-Control cl_gui_alv_grid. Dieses soll wahlweise unterschiedliche Tabellen anzeigen, zwischen denen mit Tasten hin- und hergeschaltet wird. Jedesmal soll dabei frisch selektiert werden.
Ich will das Control nicht jedesmal kaputtmachen und wieder neu aufbauen. Ich finde aber keine Methode zum Austauschen der Content-Tabelle. Den Feldkatalog (der sich mitändern soll) kann ich locker flockig austauschen, das funktioniert auch.
Wie gehe ich vor, um den Inhalt der Tabelle auszutauschen, ohne jedesmal das Control kaputtmachen zu müssen?
Pro Tabelle ein Control.
Danach gibts dann viele Methoden.
z.b.
- Grid via Subscreen einbinden und den Subscreen austauschen so dass das korrekte Grid zu sehen ist
- Ein Control und dort alle Grids reinhängen und dann je nach Wunsch nur das eine Grid auf sichtbar schalten ( dafür wird dich aber derjenige hassen, der dein Programm warten muss - hab ich aber letztens auch bei SAP irgendwo entdeckt )
Einfach immer beim Wechsel SET_TABLE_FOR_FIRST_DISPLAY aufrufen (Dafür ist die Methode ja da)
Du musst dir nur merken welche der Tabellen du anzeigst.
(Hab ich schon ein paarmal gemacht)
lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.
Die "pro Tabelle ein Control" - Methode hat den Vorteil, dass Sortierungen, Filter o.ä. pro Grid erhalten bleiben und sie ist deutlich schneller als die Austauschversion wenn du hin- und herschalten möchtest und nicht nur mikroskopische Tabellen anzeigst.
Die Austauschversion hingegen ist bei vielen sehr sehr großen Tabellen besser, da nicht so viele Daten intern gehalten werden müssen. Achte in dem Fall aber darauf, dass du den Layouthandle auch hier für jeden Grid unterschiedlich machst.
CALL METHOD gr_cc->link
EXPORTING
repid = space
dynnr = space
container = 'CC1'.
parallel dazu muss dann natürlich das Control, welches gerade nicht benötigt wird, vom Container genommen werden:
CALL METHOD gr_cc2->link
EXPORTING
repid = space
dynnr = space
container = space.
Ob das sinnvoll ist bzw. im Hintergrund das macht, was du machen willst, weiß ich nicht, aber das Control muss immerhin nicht jedes mal neu zerstört und erstellt werden...