Entwickler-Ecke
Datenbanken - Farbige Zeile in DBGrid
Crowbar - Di 04.02.03 16:52
Titel: Farbige Zeile in DBGrid
Hallo,
wie kann ich in einem DBGrid jede 2. Zeile z.B. mit einem grünen Hintergrund darstellen.
Mit den Spalten klappt es über TForm1.FilterDBGridDrawColumnCell(...), aber die Zeilen...?
Crowbar
UGrohne - Di 04.02.03 17:48
Mach das doch auch in dem Ereignis, du überprüfst halt, ob die Zeile durch 2 teilbar ist oder net (mod) und dann machste die Zelle farbig.... du machst ja bei den spalten auch nix anderes....
Gruß
Crowbar - Di 04.02.03 18:10
Das Problem hierbei ist nur, dass ich für das Zählen der Zeilen die Table.RecNo nehmen müsste. Nun, und dann stimmt meine DBGird-Sortierung nicht mit der Table.RecNo überein. Dadurch kann es dann sein, dass ich 4 nacheinanderfolgende farbige Zeilen habe, statt abwechselnd.
Gruss Crowbar
UGrohne - Di 04.02.03 19:15
Warum musst Du da Table.RecNo nehmen? Das Ereignis OnDrawColumnCell bietet doch die Variable DataCol, die die derzeitige Zeile anzeigt. Ich hab da 2 Prozeduren drausgemacht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure Tform1.DBGridauftraegeDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if einstellungenform.CBcolored.Checked then ColorGrid(DBGridauftraege, mainform.IBAuftraege, Rect, DataCol, Column, State); end;
procedure Tform1.ColorGrid(dbgIn: TDBGrid; qryIn: TIBQuery; const Rect: TRect;DataCol: Integer; Column: TColumn;State: TGridDrawState); var iValue: LongInt; begin if (DataCol mod 2)<>1 then dbgIn.Canvas.Brush.Color := clred else dbgIn.Canvas.Brush.Color := clwhite;
// Feld zeichnen dbgIn.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; |
Die erste ist das Ereignis (habs net so verändert, da wird noch ne Abfrage gemacht, obs farbig sein soll) und die zweite prüft welche Farbe genommen werden soll, je nachdem obs ne gerade oder ungerade Zeile ist. Probier das mal, müsste funktionieren.
Gruß
grayfox - Di 04.02.03 23:33
hallo UGrohne!
datacoll beschreibt die spalten und nicht die zeilen ;) bei einem 'normalen' DBGrid kann man nur über Recno auf die 'zeilen' zugreifen. und das sieht bei einem gesetzten filter oft nicht so toll aus. da bleibt dann nur der ausweg zu fremdkomponenten übrig, bei denen man auf die rows zugreifen kann. zb VUBGrid oder SMDBGrid
mfg, stefan
UGrohne - Mi 05.02.03 00:15
Ups, stimmt, da hab ich nen Denkfehler gemacht, sorry. Gut, dann würde ich ne Variable setzen. Sobald DataCol wieder 0 ist, wird die Variable umgeschaltet und die andere Farbe genommen
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Tform1.ColorGrid(dbgIn: TDBGrid; qryIn: TIBQuery; const Rect: TRect;DataCol: Integer; Column: TColumn;State: TGridDrawState); var ungerade:Boolean; begin if (DataCol=0) then ungerade:=not ungerade; if ungerade then dbgIn.Canvas.Brush.Color := clred else dbgIn.Canvas.Brush.Color := clwhite; // Feld zeichnen dbgIn.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; |
Ein bisschen Phantasie walten lassen.
Also das hab ich mir gerade in 30sec ausgeknobelt, hängt mich net auf, wenns net funktioniert, is nur so ne Idee. Natürlich sollte die Variable nen Anfangswert haben... Also besser Unit-Weit deklarieren und irgendwo initialisieren, in einem Ereignis vom Query bzw Table.
smiegel - Mi 05.02.03 00:27
Hallo,
was passiert wenn Du satt Table.RecNo, Field.RecNo oder Field.Index benutzt?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!