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
Dejan Vu
(Gast)

n/a Beiträge
 
#1

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 17: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.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 18: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
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 19:13
Was mir jetzt daran nicht mehr gefällt, ist, dass das Feld nun *immer* als 'DisplayText' deinen gefakten Wert anzeigt. Egal wo. Du kommst also kaum noch an die echten Daten ran (mit datensensitiven Controls). Wenn das so gewünscht ist. Gut. Wenn nicht, weiß nich...
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 19:19
Doch, genau das war eigentlich gewünscht.

Konkretes Beispiel: Rational denkende Menschen (und Software) schreiben und lesen SI-Einheiten. Ein Angelsachse hingegen möchte das in Zoll angezeigt bekommen.

Die Verarbeitung und alles passiert weiterhin mit SI-Einheiten. Ich denke hierfür ist das genau richtig
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 3. Dez 2014, 21:07
Denn es sagt mir ja explizit, ob er den Wert grade zur Anzeige oder zum Benutzen haben will
Genauer: zur Anzeige oder zu Bearbeitung (sprich: Feld wird in datensensitivem Control editiert).

Wie schon erwähnt, den originalen Feldwert bekommt man über Value bzw. die As<XXX>-Properties.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 4. Dez 2014, 12:22
Das einzige was mich immer noch wuschig macht ist die Tatsache, dass direkt am TDataSet auf reine Anzeige-Sachen eingehen muss.

Das TDataSet, seine Verbindung und anderes Zubehör hatte ich immer auf einem Datenmodul (sprachneutral), Anzeige wie ein TDBGrid und das TDataSource auf einem Formular. Jetzt muss ich anfangen, das zu vermischen.

Oder habe ich es schon immer falsch gemacht?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 4. Dez 2014, 12:32
Man kann im DataSet einheitliche Verhalten implementieren, wo die Anzeige dann überall gleich ist.
CalcFields sind ja auch Dinge, welche da erstmals nichts mit den Daten zu tun haben und dennoch sind sie im DataSet implementiert.

Und, wie bereits erwähnt, gibt es von anderen Anbietern auch "ordentliche" Grids, welche welcher die Anzeige ebenfalls in sich anpassen können.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 4. Dez 2014, 12:36
Dann laß doch die Finger von dem TDBwasweißich.
Bei mir kommen die Daten aus der Query in irgendeinem "nichtdisplayformat an, und ich kann damit machen was ich will, z.b. für amerianische Benutzer deren Datumsformat für die Anzeige und für deutsche deren Format (ja ich weiß, ISO ist eigentlich das Datumsformat, aber meine Benutzer wissen das nicht)
Auf jeden Fall habe ich immer eine strikte Trennung zwischen Daten und Anzeige.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 4. Dez 2014, 12:52
Das einzige was mich immer noch wuschig macht ist die Tatsache, dass direkt am TDataSet auf reine Anzeige-Sachen eingehen muss.

Das TDataSet, seine Verbindung und anderes Zubehör hatte ich immer auf einem Datenmodul (sprachneutral), Anzeige wie ein TDBGrid und das TDataSource auf einem Formular. Jetzt muss ich anfangen, das zu vermischen.
Das kommt darauf an, was du wirklich erreichen willst. Soll lediglich in diesem einen Grid die Anzeige des Feldwertes ander sein, als es die Standardformatierung des TField-Objects vorgibt, oder soll dieses Feld in allen Anzeige- und Editier-Controls in dieser veränderten Form dargestellt werden. Im ersten Fall sollte man die Manipulation in dem Grid oder dem dazugehörigen Formular durchführen. Für den zweiten Fall sind die Events des Feldes der richtige Ort.

Es ist ja auch nicht so, daß auch im normalen Betrieb die Datenfelder in ihrem nativen Format angezeigt werden. Alle TField-Objekte haben ein Standardverhalten für die Umwandlung der realen Feldinhalts in eine lesbare und editierbare Form. Bei numerischen Feldern kann man das auch noch durch das Property DisplayFormat steuern. Nur wenn man von diesem Standard abweichen will, muss man das in OnGetText und OnSetText selber implementieren (z.B. ein Integerfeld binär als Folge von 0 und 1 darstellen und editieren). Die visuelle Darstellung und Eingabe metrischer Datenwerte in imperialen Einheiten ist ein durchaus öfter anzutreffender Anwendungsfall. Ob die Umwandlung dann tatsächlich stattfindet entscheidet wird meistens über einen entsprechenden Konfigurationseintrag entschieden.
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
 
#10

AW: In einem DBGrid andere Dinge anzeigen als drinstehen

  Alt 4. Dez 2014, 13:29
Wenn Du mit einem TDB-Grid arbeiten willst, dann mach die Formatierung in einem Dataset. Wenn dir die Quelle nicht passt (weil das quasi die Rohdaten sind), dann mach eine Kopie (als CDS oder Memdata). Das ist nichts anderes als ein Viewmodel. Und in der Kopie kannst Du dann machen, was Du willst.
  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 07:13 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