CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von Pinguincommander (ForumUser / 88 / 62 / 2 ) »
Hallo miteinander ich habe mal wieder ein kleines Problem,

ich habe in meinem Programm ein ALV-Grid und habe dieses auf zwei Felder editierbar gemacht, nun möchte ich, nachdem der Anwender etwas editiert hat, die Zelle farblich markieren damit sich die Anwender selbst nochmals kontrollieren können bevor gespeichert werden soll.
Nun, wann ich ändern muss ist mir klar, mein Problem ist nur, ich arbeite mit den Styles, da sonst die Zeilen löschbar wären.
nun ist mein Problem, dass die farbliche Änderung nicht funktioniert, ich habe in meiner Styles Tabelle einen Farbeintrag für die ganze Zeile und jeweils einen für die zwei editierbaren Spalten.
wenn ich nun etwas editiere und das feld mit den Pfeiltasten verlasse wirde diese Zelle eingefärbt jedoch bei nächsten editieren verschwindet die farbe aus dieser Zelle wieder.

Kann mir mal jemand erklären warum ?
oder muss ich mit cellcolor arbeiten ?
und wenn wir schon dabei sind, was hat eigentlich vorrang bei den ganzen möglichkeiten einzufärben ?
die müssen sich ja in gewissem mase überlagern, welches steht dort denn dann am erster stelle ?

Hier anbei mal noch der code von meinem event-handler, damit ihr euch ein besseres bild machen könnt.

Code: Alles auswählen.

METHOD handle_data_changed.

    DATA  ls_good TYPE lvc_s_modi.

    LOOP AT er_data_changed->mt_good_cells INTO ls_good.
      READ TABLE i_data1
       ASSIGNING <fs_data1>
           INDEX ls_good-row_id.
      IF sy-subrc = 0.
        READ TABLE <fs_data1>-style[]
        ASSIGNING <fs_style>
        WITH KEY Fieldname = ls_good-fieldname.
        IF sy-subrc = 0.
          <fs_style>-STYLE = '1000000F'.
        ENDIF.
      ENDIF.
    ENDLOOP.


        CALL METHOD ref_alv->refresh_table_display
      EXPORTING
         i_soft_refresh = abap_false
         is_stable      = wa_stable
      EXCEPTIONS
         OTHERS         = 1.
      IF sy-subrc = 1.
        MESSAGE 'Fehler beim auffrischen der Anzeige' TYPE 'E'.
      ENDIF.

  ENDMETHOD.
EDIT: Habe gerade nochwas bemerkt.
Die Farbe wird wohl irgendwie überschrieben, in meiner Style Tabelle steht immer die Zeilenfarbe nicht die Zellenfarbe.
Heist dass die Zeilenfarbe überschreibt die Zellenfarbe ?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von a-dead-trousers (Top Expert / 4351 / 219 / 1166 ) »
hi!

Soweit ich weiß geht die Reihenfolge so:
1 Zeilenfarbe
2 Spaltenfarbe
3 Zellenfarbe

Irgendwo kann man glaub ich noch die Reihenfolge zwischen Zeile und Spalte beeinflussen, hab das aber auf die schnelle nicht gefunden.
Die Zelle ist aber immer die letzte Information und überschreibt alles andere.

Nun zu deinem Problem:
STYLE (LVC_S_STYL) ist meines erachtens falsch. Damit sollte man eigentlich "Eingabebereit", "als Button anzeigen" usw. einstellen.
COLOR (LVC_S_SCOL) wäre meine erste Wahl zum Einfäben der Zellen.

Siehe auch ABAP Hilfe http://help.sap.com/saphelp_470/helpdat ... ameset.htm

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Pinguincommander

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.

ECC: 6.18
Basis: 7.50

Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von Pinguincommander (ForumUser / 88 / 62 / 2 ) »
Hey ADT,

danke mal wieder für dein Hilfe, so hab ichs jetzt gemacht, jetzt funktionierts, aber ein kleines Problem habe ich noch,
die Farbe erschein nicht sofort, wenn ich ein feld editiere bleibt es so wie es war und erst wenn ich das nächste feld editiert habe verändert sich die Farbe. woran liegt das ich habe doch bereits ein refresh durchgeführt... ?
muss ich noch eine Methode aufrufen ?

EDIT:

Außerdem wenn ich mehrere zellen nehme und leere kann es sein das keine Farbe auftaucht, oder die Farbe sogar verschwindet.

Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von a-dead-trousers (Top Expert / 4351 / 219 / 1166 ) »
hi!

Hast du den Event DATA_CHANGED oder DATA_CHANGED_FINISHED des CL_GUI_ALV in Verwendung?
Im DATA_CHANGED darfst du die Daten deiner Tabelle NUR über den Parameter ER_DATA_CHANGED verändern (auch die Zellenfärbung) dafür kannst du aber auf das REFRESH_TABLE_DISPLAY verzichten.
Im DATA_CHANGED_FINISHED kannst du die Daten deiner Tabelle direkt ändern, musst aber im Anschluss das REFRESH_TABLE_DISPLAY aufrufen.

Zur Erklärung warum es bei dir (vermutlich weil du DATA_CHANGED verwendest) zu diesem seltsamen Verhalten kommt:
- Die ALV Grid Instanz erkennt das es Änderungen gegeben hat und sammelt diese in ER_DATA_CHANGED
- DATA_CHANGED wird ausgelöst.
- Du änderst die Daten entsprechend in deiner internen Tabelle und rufst das REFRESH_TABLE_DISPLAY auf.
- Das Grid aktualisiert teilweise seine Daten am Frontend
- Das ALV Grid speichert seine Änderungen aus ER_DATA_CHANGED in die interne Tabelle
- DATA_CHANGED_FINISHED wir ausgelöst.

Weiters musst du noch beachten, dass alles was mit DATA_CHANGED zu tun hat, erst nach dem Verlassen des Feldes durchgeführt wird.
Ich würde dir daher raten den DATA_CHANGED_FINISHED zu verwenden, da dieser Event "leichter" zu verstehen ist (vergleichbar mit PAI).
Solltest du jedoch sehr viele Zeilen in deinem Grid haben und nur eine Handvoll ist zu ändern, wäre DATA_CHANGED besser, weil performanter.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Pinguincommander

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.

ECC: 6.18
Basis: 7.50

Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von Pinguincommander (ForumUser / 88 / 62 / 2 ) »
Alles klar ich glaube ich habe verstanden was du meinst, d.h. dann aber, dass ich meine Änderungen über er_data_changed mit einfliesen lassen muss ?
d.h.: ich müsste den Parameter er_data_changed->mt_good_cells direkt etwas hinzufügen. Oder habe ich das falsch verstanden ?
Bei der Tabelle handelt es sich um mehrere tausend Sätze von denen nicht allzu viele geändert werden sollen.

Oder soll ich doch auf das event Data_changed_finished zugreifen ?

Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von ewx (Top Expert / 4821 / 303 / 634 ) »
a-dead-trousers hat geschrieben:
30.04.2013 12:57
Im DATA_CHANGED darfst du die Daten deiner Tabelle NUR über den Parameter ER_DATA_CHANGED verändern (auch die Zellenfärbung) [...]
Bist du sicher, dass das auch für die Zellenfärbung funktioniert?
ich habe meine Verarbeitung gerade mal umgestellt und setze das Feld mit LVC_T_SCOL mit MODIFY_CELL anstelle direkt in der Tabelle und anschließendem REFRESH in DATA_CHANGED_FINISHED, aber es funktioniert nicht.... :/

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
a-dead-trousers


Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von a-dead-trousers (Top Expert / 4351 / 219 / 1166 ) »
ewx hat geschrieben:
09.09.2024 16:24
Bist du sicher, dass das auch für die Zellenfärbung funktioniert?
ich habe meine Verarbeitung gerade mal umgestellt und setze das Feld mit LVC_T_SCOL mit MODIFY_CELL anstelle direkt in der Tabelle und anschließendem REFRESH in DATA_CHANGED_FINISHED, aber es funktioniert nicht.... :/
Stimmt, du hast recht. Ich hab das damals nur so zusammenfassend aus dem Stehgreif geschrieben ohne wirklich nachzuschauen. Offensichtlich hab ich dem MODIFY_STYLE zuviel Funktionalität zugestanden. 😢

EDIT:
Versuch mal, ob du über den Zugriff mittels MP_MOD_ROWS die Färbung ändern kannst, analog zur Vorgehensweise in MODIFY_STYLE.

EDIT 2:
MODIFY_STYLE ist scheinbar doch das Richtige: Es gibt im Include <CL_ALV_CONTROL> auch Style-Constanten für die Färbung.
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.

ECC: 6.18
Basis: 7.50

Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von ewx (Top Expert / 4821 / 303 / 634 ) »
a-dead-trousers hat geschrieben:
10.09.2024 07:29

EDIT 2:
MODIFY_STYLE ist scheinbar doch das Richtige: Es gibt im Include <CL_ALV_CONTROL> auch Style-Constanten für die Färbung.
Danke für deine Rückmeldung!
Die Änderung führte bei mir zu einer Endlosschleife, weil MODIFY_STYLE einen Eintrag an MT_GOOD_CELLS anhängt... 🧐 Warum auch immer...

Ich möchte das änderbare Feld kenntlich machen, so dass der Anwender sieht, welches Feld geändert wurde.

LOOP AT er_data_Changed->mt_good_cells...
if fieldname = 'PARNR'.
...
dann rufe ich er_data_changed->modify_style auf für dieses Feld auf.

Das führt dazu, dass von modify_style ein neuer Eintrag in mt_good_cells erzeugt wird, den ich dann beim nächsten loop erwische und dafür wieder modify_style aufrufe, was wiederum dazu führt, dass ein Eintrag in mt_good_cells erzeugt wird, den ich dann beim nächsten loop erwische... naja und so weiter. 😣

Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von tar (ForumUser / 24 / 8 / 15 ) »
Da bietet sich doch direkt eine Check-Variable an, mit der du den Eintrag skippen bzw. den Loop canceln kannst. Problem gelöst.

Re: CL_GUI_ALV_GRID Zellenfarbe dynamisch ändern

Beitrag von ewx (Top Expert / 4821 / 303 / 634 ) »
eine Variable reicht nicht. Ich loope über die MT_GOOD_CELLS und kann nicht entscheiden, ob der schon vorher da war oder neu hinzugekommen ist. Ich müsste die ganze Tabelle kopieren. mal sehen...

Seite 1 von 1

Vergleichbare Themen

3
Antw.
7783
Views
Zellenfarbe ändern (REUSE_ALV_LIST_DISPLAY)
von Zubasa » 17.09.2010 16:36 • Verfasst in ABAP® für Anfänger
10
Antw.
4039
Views
ALV Grid Titel (dynamisch)
von annaarnst » 17.06.2008 10:20 • Verfasst in ABAP® Core
3
Antw.
1849
Views
Listeausgabe dynamisch gestallten mit ALV-Grid
von sgevolker » 16.04.2007 16:55 • Verfasst in ABAP® für Anfänger
2
Antw.
1497
Views
Feldcatalog für Alv Grid / Tree dynamisch aus it erzeugen
von just » 14.11.2005 19:51 • Verfasst in ABAP® Core
4
Antw.
4683
Views
ALV Grid Sortierung aktualisieren im grid 1 und grid 2
von c oco » 06.02.2012 10:09 • Verfasst in ABAP Objects®

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.