![]() |
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:
|
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Hey, bin auch noch am lernen!
Aber es wird immer besser! Der Zugriff über Form1.CRDBGrid1 ist auf jedenfall der Garant für den Knieschuss ?????? Wieso? Es funktioniert doch alles! |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Zitat:
Du greifst aber auf eine Komponente mit bestimmten Namen zu die direkt auf einem Formular mit einem bestimmten Namen liegt. Anderes Formular-> peng Umbenenen Komponente oder Formular: bumm Zwischenschieben eines Contrainers: Knall. |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Zitat:
Delphi-Quellcode:
: Du bist schon in der Form-Instanz, bzw. in deren Methoden, womit du über Self, bzw ein implizites Self direkt dran kommst.
Form1.xxx
Wer sagt dir, das in der globalen Variable wirklich die Instanz drin gespeichert ist, in welcher du grade drin bist? Vor einer Weile gab es den Fehler, daß die Form doppelt ausversehn erstellt wurde, womit die zweite Instanz in der Variable drinstand, aber die erste Instanz wurde als MainForm angezeigt. Über Form1.CRDBGrid1 griff man dann also auf ein ganz anderes Grid zu. CRDBGrid1 kannst du gerne verwenden, aber über den Sender ist der Code (a) wiederverwendbar und (b) gibt es weniger Probleme, wenn du der Komponente irgendwann man einen "ordentlichen" Namen geben tätest. |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Ich habe das schon verstanden!
Aber da ich nur ein Form brauche und soweit alles läuft? Warum sollte ich es ändern? Ich möchte nur dazu lernen! Ok ihr habt mich überzeugt! Werde es ändern! Danke an ALLE ! |
AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
Das Beispiel mit den mehreren Form-Instanzen vorhin war ein "Fehler". Derjenige wollte ja eigentlich auch nur ein Form verwenden.
Oder greife mal auf das Form1 im OnCreate zu .... zu diesem Zeitpunkt ist diese Variable noch nicht gesetzt wurden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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