![]() |
Re: Anzeige der Daten im DBGrid zur Laufzeit ändern
@aschne1: also deine Lösung gefällt mir da am Besten. Wie ich ja auch schon in meiner Frage geschrieben habe brauche ich dieses "neue Feld" nur zur Visualisierung. Es sollen keine Daten in DB gespreichert werden - nur im DBgrid angezeigt werden (readonly).
Hab mal deinen Code in mein Query.CalcFields eingefügt, soweit so gut. Dann in meinem Feld editor das neue feld hinzugefügt und bevor ich das dbgrid anzeige mein autocalcfield auf true gestellt. Leider sürzt mein programm ab sobald ich das dbgrid anzeigen lasse... |
Re: Anzeige der Daten im DBGrid zur Laufzeit ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo kico,
vielleicht hilft Dir das weiter:
Code:
Ganz perfekt ist das Ganze leider nicht, da ich nicht herausgefunden haben, wie man den
procedure TFBP.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); var Grid : TDBGrid; x, y : integer; begin // selektierte Zeile wird original angezeigt if (gdSelected in State) or (gdFocused in State) then exit; // alle anderen Zeilen Grid:= TDBGrid(Sender); s := lowercase(Grid.Columns.Items[DataCol].FieldName); // wenn man den Feldnamen verwendet // die Spalte "einheit" enthält ST, PR, .... // im Beispiel wird "ST" zu "Stück", "PR" zu "Paar", // also kann man aus "0" auch "bestellt" machen // das funktioniert sowohl bei Feldern vom Typ ftString als auch vom Typ ftFloat if s = 'einheit' then begin tx := Grid.DataSource.DataSet.FieldByName(s).AsVariant; x := rect.Left+12; y := rect.Top+2; if tx = 'ST' then Grid.Canvas.TextOut(x, y, 'Stück'); if tx = 'PR' then Grid.Canvas.TextOut(x, y, 'Paar'); end; end; ursprünglichen Inhalt des Feldes unterdrücken kann. Der Fehler wird sichtbar, wenn man die Spalte breit genug zieht. Dann steht links "Stück" und irgendwo rechts daneben das originale "ST" (Problem siehe Bild) Aber vielleicht weiß da ja auch noch jemand eine Lösung. mfg eddy |
Re: Anzeige der Daten im DBGrid zur Laufzeit ändern
Code:
procedure TForm1.Table1NrGetText(Sender: TField; var Text: String;
DisplayText: Boolean); begin case Table1Nr.AsInteger of 0 : Text := 'geliefert'; 1 : Text := 'nicht gelefert'; //..usw, usw end; end; |
Re: Anzeige der Daten im DBGrid zur Laufzeit ändern
Hallo Memo,
ist ja noch besser. Wie kann man diese Prozedure nutzen, ohne vorher im ObjectInspector die Felder der Tabelle als TField hinterlegen zu müssen? mfg eddy |
Re: Anzeige der Daten im DBGrid zur Laufzeit ändern
Zitat:
Zitat:
|
Re: Anzeige der Daten im DBGrid zur Laufzeit ändern
Hallo kico
Hast Du beide Felder (Integerwert und BerechnetesFeld) in Deiner Abfrage hinzugefügt? Zur Kontrolle habe ich das Programm bei mir getestet und es funktioniert einwandfrei. Bitte füge die Felder mit dem Editor (Doppelclick auf die Abfrage) hinzu. Im Beispiel greife ich über eine TADOConnection auf eine Accessdatenbank zu. Die Datasource des DBGrids ist mit einer TADODataSet verbunden, diese wiederum mit der TADOConnection. Zur Illustration einmal ein Ausschnitt vom Interface-Teil
Delphi-Quellcode:
Die Abfrage muss beim Starten aktiv sein!
type
TForm1 = class(TForm) ADOConnection: TADOConnection; query: TADODataSet; DBGrid: TDBGrid; queryIntegerwert: TIntegerField; //Integerwert (Dein Datenbankfeld) DataSource: TDataSource; queryBerechnetesFeld: TStringField; //Berechnetes Feld procedure queryCalcFields(DataSet: TDataSet); // private { Private-Deklarationen } public { Public-Deklarationen } end; Gutes Gelingen mfg Armin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 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