![]() |
Delphi-Version: 5
DBGrid darstellen von neg Zahlen als pos
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; |
AW: DBGrid darstellen von neg Zahlen als pos
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; |
AW: DBGrid darstellen von neg Zahlen als pos
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?
|
AW: DBGrid darstellen von neg Zahlen als pos
Dann geht die Info verloren, dass der Wert im Original negativ war. Also brauch man ein zusätzliches Bool-Feld.
|
AW: DBGrid darstellen von neg Zahlen als pos
Dank shmia, :thumb: ich musste jedoch den code etwas abändern. Aber Du hast mir mit der Idee genau geholfen:
Delphi-Quellcode:
und die Routine: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;
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; |
AW: DBGrid darstellen von neg Zahlen als pos
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. |
AW: DBGrid darstellen von neg Zahlen als pos
Du kannst ganz einfach bei dem entsprechenden Feld das
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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-2025 by Thomas Breitkreuz