AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid darstellen von neg Zahlen als pos

Ein Thema von wschrabi · begonnen am 16. Feb 2012 · letzter Beitrag vom 18. Feb 2012
Antwort Antwort
wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#1

DBGrid darstellen von neg Zahlen als pos

  Alt 16. Feb 2012, 17:47
Delphi-Version: 5
Hi,
hat jemand eine Lösung für mein Problem?

Ich habe eine DB die ich am Screen mit DBGrid darstelle.
Jetzt sind in der DB auch neg Zahlen drin, die ich positiv im Grid darstellen möchte.
(Weiters wird wenn neg. die CellFarbe geändert, das hab ich mit dem Event DBGrid1DrawColumnCell geschafft.)
Hat jemand eine Idee wie ich in diesem Event auch den Cell-Inhalt ändern kann, ohne dass es auf die DB sich auswirkt?
DANKE

Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  col: integer;
begin
  for col:= 1 to MyQuery2.FieldByName('NumLOGDATA').AsInteger do
    begin
    if Column.Fieldname = 'MPi'+IntToStr(col) then //alternativ über den Index des Spalte
      begin
      if MyQuery2.FieldByName('MPi'+IntToStr(col) ).AsFloat < 0 then
        begin
        DBGrid1.Canvas.brush.color:=clYellow;
        DBGrid1.Canvas.font.color:=clBlack;
        DBGrid1.DefaultDrawColumnCell(rect, 1, column,state);
        //DBGrid1.DataSource.DataSet.FieldByName('MPi'+IntToStr(col)).AsFloat:=-1*DBGrid1.DataSource.DataSet.FieldByName('MPi'+IntToStr(col)).AsFloat
        end
      else
        begin
        DBGrid1.Canvas.brush.color:=clWhite;
        DBGrid1.Canvas.font.color:=clBlack;
        DBGrid1.defaultdrawcolumnCell(rect, 1, column,state);
        end;
      end;
    end;
end;

Geändert von wschrabi (16. Feb 2012 um 17:50 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: DBGrid darstellen von neg Zahlen als pos

  Alt 16. Feb 2012, 17:54
Du müsstest einen Eventhandler für OnGetText des TField schreiben.
Kleines Beispiel zur Anregung:
Delphi-Quellcode:
procedure TDatenModule1.BetragFieldOnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
   if DisplayText then
      if Sender.AsFloat < 0.0 then
         Delete(Text, 1, 1); // Minuszeichen löschen
end;

....
// Eventhandler einklinken
query1.FieldByName('Warenwert').OnGetText := self.BetragFieldOnGetText;
Andreas
  Mit Zitat antworten Zitat
Jumpy

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

AW: DBGrid darstellen von neg Zahlen als pos

  Alt 17. Feb 2012, 11:40
Wenn die Ergebnismenge von einer Query geliefert wird, wäre es da nicht einfacher sich direkt den absolutbetrag der Werte von der DB/Query liefern zu lassen?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: DBGrid darstellen von neg Zahlen als pos

  Alt 17. Feb 2012, 11:42
Dann geht die Info verloren, dass der Wert im Original negativ war. Also brauch man ein zusätzliches Bool-Feld.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#5

AW: DBGrid darstellen von neg Zahlen als pos

  Alt 17. Feb 2012, 18:08
Dank shmia, ich musste jedoch den code etwas abändern. Aber Du hast mir mit der Idee genau geholfen:
Delphi-Quellcode:

procedure TForm1.MyQuery2AfterOpen(DataSet: TDataSet);
var
  col: integer;
begin
  //20120217
  for col:= 1 to 225 (* MyQuery2.FieldByName('NumLOGDATA').AsInteger *) do
    begin
    MyQuery2.FieldByName('MPi'+IntToStr(col)).OnGetText := self.BetragFieldOnGetText;
    end;


end;
und die Routine:

Delphi-Quellcode:
procedure TForm1.BetragFieldOnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
var
  mp: string;
begin
   if DisplayText then
      if ((Sender.AsFloat < 0.0)and(FloatToStr(Sender.AsFloat)<>'')) then
          begin
          mp:=FloatToStr(Sender.AsFloat);
          Delete(mp, 1, 1); // Minuszeichen löschen
          Text:=mp;
          end
      else
        begin
        Text:=Sender.AsString;
        end;

end;
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: DBGrid darstellen von neg Zahlen als pos

  Alt 18. Feb 2012, 09:10
Eine andere Möglichkeit wäre, ein berechnetes Feld zu erzeugen, das den absoluten Werte enthält.
Dieser Wert wird angezeigt, aber die Farbkodierung wird anhand des originalen Wertes vorgenommen.

Wenn ich nämlich den (negativen) Wert an anderer Stelle doch einmal anzeigen will, stellt mir das 'OnGetText' ein Bein.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: DBGrid darstellen von neg Zahlen als pos

  Alt 18. Feb 2012, 11:15
Du kannst ganz einfach bei dem entsprechenden Feld das DisplayFormat setzen. Für ein Feld mit zwei Nachkommastellen würde man z.B. "0.00;0.00" dort eintragen, dann würden negative Zahlen wie positive dargestellt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:31 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