Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist! (https://www.delphipraxis.net/170051-crdbgrid1drawcolumncell-if-true-then-begin-problem-wenn-das-grid-leer-ist.html)

Alterauge 28. Aug 2012 10:54

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;

mkinzler 28. Aug 2012 10:56

AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
 
Frag halt vorher ab, ob die Datenmange überhaupt Datensätze enthält.

Alterauge 28. Aug 2012 10:59

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 :-(

s.h.a.r.k 28. Aug 2012 11:00

AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
 
Delphi-Quellcode:
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;
Und formatier mal deinen Code ein wenig. Damit hilfst du nicht nur dir, sondern auch anderen, die den mal lesen müssen ;)

[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?

Alterauge 28. Aug 2012 11:12

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!

Jumpy 28. Aug 2012 11:29

AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1180292)
Und formatier mal deinen Code ein wenig. Damit hilfst du nicht nur dir, sondern auch anderen, die den mal lesen müssen ;)

Zitat:

Zitat von Alterauge (Beitrag 1180298)
Habe leider keine Ahnung mehr, was ich mir da zusammen
programmiert habe!

q.e.d. :-D

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

mkinzler 28. Aug 2012 11:30

AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
 
Zitat:

Zitat von Alterauge (Beitrag 1180298)
Hey super geht!

Danke!

Habe leider keine Ahnung mehr, was ich mir da zusammen
programmiert habe!

Das ist wohl dein Hauptproblem. Dir fehlt einfach das nötige Grundlagenwissen.

himitsu 28. Aug 2012 11:47

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.

Sir Rufo 28. Aug 2012 11:57

AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
 
Und bitte nicht so auf das Grid zugreifen, sondern so
Delphi-Quellcode:
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;
Der Zugriff über
Delphi-Quellcode:
Form1.CRDBGrid1
ist auf jedenfall der Garant für den Knieschuss :)

s.h.a.r.k 28. Aug 2012 12:00

AW: CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!
 
Zitat:

Zitat von Sir Rufo (Beitrag 1180313)
Der Zugriff über
Delphi-Quellcode:
Form1.CRDBGrid1
ist auf jedenfall der Garant für den Knieschuss :)

No Risk, no Fun! :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz