![]() |
Datenbank: MySQL • Version: 5.5 • Zugriff über: MyConnection
CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Hallo Freunde,
also habe hier unter CRDBGrid1DrawColumnCell siehe Quelltext, eine if Anweisung! Soweit auch alles OK! Mein Problem ist, wenn das Grid leer ist, zum Beispiel durch löschen der Datensätze! Merkert das Grid, also die if Anweisung! Habe die Anweisung mal ausgeklammert {} dann läuft alles! Was kann ich da machen?
Delphi-Quellcode:
procedure TForm1.CRDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); var i : Integer; Wert: string; begin Wert := CRDBGrid1.DataSource.DataSet.FieldByName('Zuordnung').Value; if Wert = '1 sofort' then begin CRDBGrid1.Canvas.Brush.Color := clred; CRDBGrid1.Canvas.Font.Color := clblack; end else if Wert = '0 Eingang' then begin CRDBGrid1.Canvas.Brush.Color := clyellow; CRDBGrid1.Canvas.Font.Color := clblack; end else if Wert = '3 abwartend' then begin CRDBGrid1.Canvas.Brush.Color := clAqua; CRDBGrid1.Canvas.Font.Color := clblack; end else if Wert = '9 Fehler' then begin CRDBGrid1.Canvas.Brush.Color := clblack; CRDBGrid1.Canvas.Font.Color := clred; end else if Wert = '98 gesendet' then begin CRDBGrid1.Canvas.Brush.Color := cllime; CRDBGrid1.Canvas.Font.Color := clblack; end else begin end; CRDBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); begin CRDBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); if (gdSelected in State) then begin Form1.CRDBGrid1.Canvas.Brush.Color := clHighlight; Form1.CRDBGrid1.Canvas.Font.Color:=clblack; end; form1.crDBGrid1.Canvas.FillRect(Rect); form1.crDBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString); begin with MyTable1 do for i := 5 to Pred(Fields.Count) do Fields[i].DisplayWidth := 255; end; end; end; |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Frag halt vorher ab, ob die Datenmange überhaupt Datensätze enthält.
|
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Hey,
habe ich mal versucht! Hatte aber anschließend Probleme mit dem Refresh! Habe den Quelltext leider wieder gelöscht :-( |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Delphi-Quellcode:
Und formatier mal deinen Code ein wenig. Damit hilfst du nicht nur dir, sondern auch anderen, die den mal lesen müssen ;)
procedure TForm1.CRDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); var i : Integer; Wert: string; begin if (CRDBGrid1.DataSource.DataSet.RecordCount = 0) then Exit; { hier dein Code } end; [add] Was für Probleme hattest dann mit dem Refresh? Du fängst doch nur den Fall ab, wenn keine Elemente mehr enthalten sind. Was soll denn da passieren? |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Hey super geht!
Danke! Habe leider keine Ahnung mehr, was ich mir da zusammen programmiert habe! |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Zitat:
Zitat:
Evtl. hilft auch schon zu testen, ob der Feldwert nicht null ist:
Delphi-Quellcode:
if not CRDBGrid1.DataSource.DataSet.FieldByName('Zuordnung').IsNull then
begin //[...] end |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Zitat:
|
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Ich kann mich ja täuchen, aber wäre es nicht besser auf den Wert der grade zu zeichnenden Zelle zuzugreifen, also über den Parameter Column, anstatt auf einen x-beliebigen Wert des aktiven Datensatzes, welcher mit der Zelle nicht unbedingt was zu tun haben muß?
Die Zelle/Zeile kann ja für einen ganz anderen Datensatz stehen. |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Und bitte nicht so auf das Grid zugreifen, sondern so
Delphi-Quellcode:
Der Zugriff über
procedure TForm1.CRDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); var i : Integer; Wert : string; Grid : TCRDBGrid; begin if not ( Sender is TCRDBGrid ) then Exit; Grid := Sender as TCRDBGrid; if not ( Assigned( Grid.DataSource ) and Assigned( Grid.DataSource.DataSet ) and ( Grid.DataSource.DataSet.RecordCount > 0 ) ) then Exit; { hier dein Code ... aber Zugriff auf das Grid über die Variable Grid } end;
Delphi-Quellcode:
ist auf jedenfall der Garant für den Knieschuss :)
Form1.CRDBGrid1
|
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz