Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#10

AW: Zeilen eines TDBGrid "Blockweise" färben

  Alt 29. Jan 2018, 11:44
Hast Du für das Programm zufällig die JVCL zur Verfügung?

Dann könnte sich ein Blick auf TJvDBGrid lohnen.
Der Austausch ist einfach:
Altes Grid raus, neues Grid rein, solange der Name gleich bleibt, sollte das erstmal ohne Nebenwirkungen gehen.

Die Methoden für die farblische Gestaltung erscheinen mir aber deutlich leistungsfähiger.

Ein Grundproblem wird aber bleiben:

Beim Scrollen durch die Datenmenge, der Auswahl einer Zeile bzw. dem Aufheben der Auswahl ... muss man immer auf den Satz davor schauen, um auf die richtige Farbgestaltung zu kommen.

Das wird vermutlich zu einem wilden "Gehopse" mit Dataset.Next und Dataset.Prev führen.

Hab's gestern mal versucht, mir ist da keine sinnvolle und immer funktionierende Lösung eingefallen.

Beim Öffnen der Datenmenge und dem vorwärtsscrollen hat's ja noch geklappt, aber rückwärts oder bei der Auswahl eines Datensatzes und folgendem Wechsel vorwärts oder rückwärts bin ich gescheitert.

Was man eventuell noch versuchen könnte:

Neben dem DBGrid noch ein unsichtbares Stringgrid "mitführen".

Beim Lesen des Daten wird in das StringGrid je Datensatz dessen RecNo und seine Farbe als Zeile eingefügt. Scrollt man nun durch die Datenmenge, so schaut man dort nach, ob die RecNo schon vorhanden ist. Wenn ja, wird dem StringGrid der Wert für die Farbe entnommen, andernfalls muss die Farbe ermittelt werden und dann im StringGrid eine entsprechende Zeile eingefügt werden.

Oder immer dann, wenn eine neue VorgangsID auftaucht wird die im StringGrid mit der entsprechenden Farbe vermerkt. Bei einem Datensatzwechsel wird dort dann nachgeschaut, welche Farbe zu vergeben ist. Das könnte im Ereignis OnDrawColumnCell realisierbar sein.

Bei kleinen Datenmengen mag das insgesamt so angehen, für große Datenmengen dürfte es aber eher ungeeignet sein.

Oder im DataSet eine zusätzliche Spalte einfügen für den Farbwert. Die Spalte darf halt nur nicht angezeigt werden. Dann könnte man beim Scrollen die Farbe dort entnehmen. Nur bei der erstmaligen Anzeige eines Datensatzes muss halt die Farbe erst aus dem vorherigen Datensatz ermittelt werden und dann im DataSet eingefügt werden.
Bei einer ReadOnly-Datenmenge dürfte das aber auch schon wieder scheitern.
  Mit Zitat antworten Zitat