AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken CRDBGrid1DrawColumnCell, if true then begin, problem wenn das Grid leer ist!

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

Ein Thema von Alterauge · begonnen am 28. Aug 2012 · letzter Beitrag vom 28. Aug 2012
Antwort Antwort
Seite 1 von 2  1 2   
Alterauge

Registriert seit: 4. Mär 2011
306 Beiträge
 
Delphi 2010 Professional
 
#1

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

  Alt 28. Aug 2012, 11:54
Datenbank: MySQL • Version: 5.5 • Zugriff über: MyConnection
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 sofortthen begin
    CRDBGrid1.Canvas.Brush.Color := clred;
     CRDBGrid1.Canvas.Font.Color := clblack;
       end else
    if Wert = '0 Eingangthen begin
     CRDBGrid1.Canvas.Brush.Color := clyellow;
     CRDBGrid1.Canvas.Font.Color := clblack;
       end else
    if Wert = '3 abwartendthen begin
     CRDBGrid1.Canvas.Brush.Color := clAqua;
     CRDBGrid1.Canvas.Font.Color := clblack;
        end else
    if Wert = '9 Fehlerthen begin
     CRDBGrid1.Canvas.Brush.Color := clblack;
     CRDBGrid1.Canvas.Font.Color := clred;
        end else
       if Wert = '98 gesendetthen 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;

Geändert von Alterauge (28. Aug 2012 um 12:07 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 28. Aug 2012, 11:56
Frag halt vorher ab, ob die Datenmange überhaupt Datensätze enthält.
Markus Kinzler
  Mit Zitat antworten Zitat
Alterauge

Registriert seit: 4. Mär 2011
306 Beiträge
 
Delphi 2010 Professional
 
#3

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

  Alt 28. Aug 2012, 11:59
Hey,

habe ich mal versucht! Hatte aber anschließend Probleme mit dem Refresh!
Habe den Quelltext leider wieder gelöscht
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

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

  Alt 28. Aug 2012, 12:00
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?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Alterauge

Registriert seit: 4. Mär 2011
306 Beiträge
 
Delphi 2010 Professional
 
#5

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

  Alt 28. Aug 2012, 12:12
Hey super geht!

Danke!

Habe leider keine Ahnung mehr, was ich mir da zusammen
programmiert habe!
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#6

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

  Alt 28. Aug 2012, 12:29
Und formatier mal deinen Code ein wenig. Damit hilfst du nicht nur dir, sondern auch anderen, die den mal lesen müssen
Habe leider keine Ahnung mehr, was ich mir da zusammen
programmiert habe!
q.e.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
Ralph

Geändert von Jumpy (28. Aug 2012 um 12:32 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 28. Aug 2012, 12:30
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 28. Aug 2012, 12:47
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

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

  Alt 28. Aug 2012, 12:57
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 Form1.CRDBGrid1 ist auf jedenfall der Garant für den Knieschuss
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#10

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

  Alt 28. Aug 2012, 13:00
Der Zugriff über Form1.CRDBGrid1 ist auf jedenfall der Garant für den Knieschuss
No Risk, no Fun!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.
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