Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi In einem DBGrid andere Dinge anzeigen als drinstehen (https://www.delphipraxis.net/183004-einem-dbgrid-andere-dinge-anzeigen-als-drinstehen.html)

Der schöne Günther 3. Dez 2014 16:42

Delphi-Version: XE7

In einem DBGrid andere Dinge anzeigen als drinstehen
 
Ihr Profis habt das ja schon alle x mal gemacht 8-): Ich lasse den Benutzer mit einem
Delphi-Quellcode:
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
Delphi-Quellcode:
TDBGrid
nichts und nicht auf dem
Delphi-Quellcode:
TDataSource
nichts. Was übersehe ich?

mm1256 3. Dez 2014 16:50

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
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;

p80286 3. Dez 2014 16:53

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
Delphi-Quellcode:
select wert*10 from irgendwo
oder

Pseudocode:
Delphi-Quellcode:
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

Dejan Vu 3. Dez 2014 16:57

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
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).

Der schöne Günther 3. Dez 2014 17:11

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
Zitat:

Zitat von p80286 (Beitrag 1282127)
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.

Zitat:

Zitat von mm1256 (Beitrag 1282126)
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".

Zitat:

Zitat von Dejan Vu (Beitrag 1282128)
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. :x

himitsu 3. Dez 2014 17:16

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
Zitat:

Zitat von p80286 (Beitrag 1282127)
(das geht natürlich mit TDBGrid nicht)

Dafür gibt es dort die Unterscheidung zwischen Value, EditValue und DisplayValue, wobei man den DisplayValue beliebig ändern kann.

Der schöne Günther 3. Dez 2014 17:28

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
Was? Erkläre dich!
DisplayValue hört sich gut an, aber was hat es mit einem TDBGrid zu tun?

Dejan Vu 3. Dez 2014 17:30

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1282131)
Warum blähe ich die Ergebnismenge hier künstlich auf?

Tust Du ja nicht.

Der schöne Günther 3. Dez 2014 17:32

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
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.

Dejan Vu 3. Dez 2014 17:42

AW: In einem DBGrid andere Dinge anzeigen als drinstehen
 
Ich würde das wirklich im TDataset machen. Die TDataSource ist ja nur ein Verteiler für Dinge, die mit den Daten passieren (events und so). Das Grid wäre wäre noch eine Möglichkeit, aber das TDBGrid bietet hier keine komfortable Möglichkeit.

Auf der Ebene, auf der Du dich bewegst (RAD mit datensensitiven Elementen), würde ich auch die 'rapid' Lösung nehmen, also die, die am schnellsten und direktesten mit dem geringsten Aufwand zu Ziel führt. Willst Du dagegen eine nachhaltige, erweiterbare, skalierbare und schießmichtot Lösung, dann könntest Du dir natürlich ein Viewmodel bauen, aber, WTF.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr.
Seite 1 von 3  1 23      

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