Autor Beitrag
Crowbar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Di 04.02.03 16:52 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Mi 05.02.03 00:27 
Hallo,

was passiert wenn Du satt Table.RecNo, Field.RecNo oder Field.Index benutzt?

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)