AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi In einem DBGrid andere Dinge anzeigen als drinstehen
Thema durchsuchen
Ansicht
Themen-Optionen

In einem DBGrid andere Dinge anzeigen als drinstehen

Ein Thema von Der schöne Günther · begonnen am 3. Dez 2014 · letzter Beitrag vom 4. Dez 2014
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 17:42
Delphi-Version: XE7
Ihr Profis habt das ja schon alle x mal gemacht : Ich lasse den Benutzer mit einem TDBGrid in einer Ergebnismenge wühlen. Ich möchte ihm allerdings in einer Spalte (Zahl) nicht das anzeigen was drinsteht, sondern den zehnfachen Wert.

Wo muss ich ansetzen? Ich kenne mich mit Datenbanken nicht aus, irgendwo habe ich den Terminus "Berechnete Felder" im Hinterkopf.

Ich finde auf dem TDBGrid nichts und nicht auf dem TDataSource nichts. Was übersehe ich?
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 17:50
Bin zwar kein Profi...aber vielleicht reicht's trotzdem:

Delphi-Quellcode:
procedure TForm1.DBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  with (Sender as TDBGrid).Canvas do begin
    Column.Field.AsFloat...

  end;
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 17:57
Du kannst:
1. Berechnete Felder erstellen. Dazu fügst Du in deinem TDatset-Derivar ein neues Feld ein, setzt den Modus auf 'calculated' und setzt das Feld im OnCalculate(Fields?)-Ereignis des TDataset à la 'myCalcField.AsInteger := random(20)';

2. Du erstellst Eventhandler für OnGetText/OnSetText für das Feld (blöde Idee)

3. Du überschreibst, wie mein Vorredner geschrieben hat, das onDraw-Event des Grids (auch nicht soooo toll, finde ich)

Fang mal mit calculated fields an. Ist praktisch. OnGetText/OnSetText verwendet man zum 'übersetzen' von Feldern (eher Transliteration).
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 18:44
2. Du erstellst Eventhandler für OnGetText/OnSetText für das Feld (blöde Idee)
Ist eigentlich gar nicht so blöd. Solange die Felder im DBGrid nicht geändert werden, braucht man sich um den OnSetText-Event auch gar nicht kümmern, aber auch das wäre für diesen Anwendungsfall nicht schwer.

Man kann ja auch problemlos mit den tatsächlichen Werten der Felder weiterarbeiten, da diese ja nicht verändert werden. Der Event wird ja nur bei der Abfrage der Properties Text und DisplayText ausgewertet. Die Properties Value oder AsString oder alle anderen As<XXX> liefern immer noch die Originalwerte.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 18:52
Ist eigentlich gar nicht so blöd. Solange die Felder im DBGrid nicht geändert werden, braucht man sich um den OnSetText-Event auch gar nicht kümmern, aber auch das wäre für diesen Anwendungsfall nicht schwer.
Richtig ... 'solange'.. Aber dann hat man eine schwer zu findende Macke in seiner SW. Ich mag das 'verbiegen' von Originalwerten nicht, außer zur Transliteration, aber dann ist das gewollt. Allerdings ist das alles Geschmackssache bzw. eine Frage des Patterns. Wenn ich in meiner Anwendung häufig Änderungen der Darstellung über das OnGetText mache, dann werde ich da bei Problemen auch nachschauen...

Hmm.. Vielleicht wirklich nicht so blöd, meine kurzzeitige Gehirnabsenkung.

Ich persönlich (der es gerne klar und einfach hat), bevorzuge 'MyField' und 'MyFakedField' als explizite Feldnamen für die Daten. Dann weiß ich selbst nach 10 Tagen noch, was Sache war.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 19:06
Das OnGetText -Event eines TFields ist wirklich auch interessant. Denn es sagt mir ja explizit, ob er den Wert grade zur Anzeige oder zum Benutzen haben will:

Delphi-Quellcode:
TFieldGetTextEvent = procedure(
   Sender: TField;
   var Text: string;
   DisplayText: Boolean
) of object;

Gute Argumente auf beiden Seiten. Ich muss da mal drüber grübeln...
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 17:53
select wert*10 from irgendwo oder

Pseudocode:xx.Cells[x,y].Text=inttostr(myquery.field[z].asinteger*10; (das geht natürlich mit TDBGrid nicht)

aber ich befürchte Du meinst etwas anderes.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 18:11
aber ich befürchte Du meinst etwas anderes.
Richtig, ich will ja nur die Anzeige anpassen. Arbeiten möchte ich natürlich mit den "echten" Daten.

Bin zwar kein Profi...aber vielleicht reicht's trotzdem:
Danke für die Idee. Das wird sicher funktionieren, wäre aber mein letzter Ausweg. Es ist im Endeffekt genau was ich will, aber zwingt einem zum "Malen".

Berechnete Felder erstellen. [...]
Das wird es wohl werden. Was mich, so als Amateur, daran jetzt stört ist: Warum blähe ich die Ergebnismenge hier künstlich auf? Klar, das wird wahrscheinlich auf Client-Seite erst nachträglich drangedichtet werden (hoffe ich), aber mir ist das unsympathisch, dass da jetzt jeder drankommt.

Ich wollte eigentlich nur die Werte im DBGrid anpassen. Blöd dass der da nichts anbietet.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 18:30
Warum blähe ich die Ergebnismenge hier künstlich auf?
Tust Du ja nicht.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 18:32
Ich formuliere es anders herum: Ich fummele am TDataSet herum. Ich hätte erwartet, direkt den TDBGrid oder wenigstens das TDataSource anfassen zu können.

Wenn ich jetzt irgendeine Logik habe, die das TDataSet auswertet kann sie auch an die berechneten Felder dran die nur für die Anzeige verwendet werden. Finde ich, spontan, doof.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:18 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 by Thomas Breitkreuz