ich habe einen editierbaren ALV mit set_table_for_first_display und fange Datenänderungen mit dem Ereignis daten_change (cl_gui_alv_grid) ab.
Im ALV kann man die Materialnummer manuell eingeben, für die ich dann nach ENTER in daten_change den Kurztext dazu lese, in er_data_changed->mp_mod_rows ändere und im ALV anzeigen will.
Für einen neuen Datensatz funktioniert das bestens.
Wenn man bei einem vorhandenen Datensatz die Materialnummer ändert, dann wird der Kurztext im ALV nicht aktualisiert. Das könnte ich an der Stelle durch einen refresh_table_display erreichen.
Jetzt das Problem: wenn ich gleichzeitig einen neuen Datensatz und einen geänderten Datensatz nach ENTER in daten_change habe, dann steht der neue Datensatz nach refresh_table_display in der Spaltenüberschrift und der geänderte Datensatz wird richtig angezeigt.
Wenn ich den refresh_table_display weg lasse, habe ich noch mal das Problem mit dem nicht aktualisierten Text im ALV.
Wie kann ich erreichen, das bei diesem Zustand alles richtig läuft? Ein Zeilenweiser ALV-Refresh ist ja leider nicht möglich.
Ich habe die Lösung gefunden:
Man schreibt einfach die neuen Daten aus er_data_changed->mp_mod_rows in die interne ALV-Tabelle und macht anschließend einen refresh. Dann hat man die neuen Daten im ALV und die Daten in er_data_changed->mp_mod_rows werden gelöscht. Die geänderten Daten muß man vorher natürlich auch noch verarbeiten.