Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DBGrid Darstellungs-Text "umwandeln" (https://www.delphipraxis.net/173736-dbgrid-darstellungs-text-umwandeln.html)

apm 13. Mär 2013 11:03

DBGrid Darstellungs-Text "umwandeln"
 
Hi!

Ich hab ein optisches Problem bei einem DBGrid.
In meiner Datenbank wandle ich bestimmte Zeichen um (u.a. & -> #38; ).

Wenn ich während der Laufzeit eine Übersicht lade, habe ich im Grid die DB-Strings zu stehen (z.B.: "#38; was machst du so? ").
Zum Editieren einzelner Felder nutze ich Edits und Memos. Beim einladen der Strings in die Bearbeitungs-Elemente werden sie erst umgewandelt: "& was machst du so?"
Ich hätte aber gern schon den "richtigen" String in der Grid-Vorschau.

Jemand schon mal gemacht?


Die Anbindung der MySQL-Datenbank nehme ich über eine ADOConnection vor.

mfg

Jumpy 13. Mär 2013 11:40

AW: DBGrid Darstellungs-Text "umwandeln"
 
Wenn du die Daten mit einer Query ins Grid bringst, könntest du die Umwandlung schon im QSL-Statement vornehmen.

Furtbichler 13. Mär 2013 11:43

AW: DBGrid Darstellungs-Text "umwandeln"
 
Verwende die 'OnGetText/OnSetText' Eigenschaft des persistenten Feldes. Dort nimmst Du diese Form von Umwandlung vor.

OnGetText würde dann z.B. #38 in '&' umwandeln, OnSetText wandelt das dann zurück.

apm 13. Mär 2013 13:35

AW: DBGrid Darstellungs-Text "umwandeln"
 
Die 'OnGetText/OnSetText'-Variante finde ich im Projektzusammenhang besser.
Ich hab ein wenig google für mich arbeiten lassen aber kein richtiges Beispiel finden können was mich weiterbringt (Übergabeparameter etc..).

Sir Rufo 13. Mär 2013 15:04

AW: DBGrid Darstellungs-Text "umwandeln"
 
Zitat:

Zitat von apm (Beitrag 1207237)
Die 'OnGetText/OnSetText'-Variante finde ich im Projektzusammenhang besser.
Ich hab ein wenig google für mich arbeiten lassen aber kein richtiges Beispiel finden können was mich weiterbringt (Übergabeparameter etc..).

Die Übergabeparameter sind doch sehr übersichtlich
(ungetestet)
Delphi-Quellcode:
procedure TForm1.ClientDataSet1TestGetText( Sender : TField; var Text : string; DisplayText : Boolean );
begin
  if not DisplayText then
    Text := StringReplace( Text, '#38', '&', [rfReplaceAll] );
end;

procedure TForm1.ClientDataSet1TestSetText( Sender : TField; const Text : string );
begin
  Sender.Value := StringReplace( Text, '&', '#38', [rfReplaceAll] );
end;

apm 15. Mär 2013 11:06

AW: DBGrid Darstellungs-Text "umwandeln"
 
Danke für die Infos!
Jetzt ist das Ganze doch ein wenig anders geworden. Ich habs ins DrawColumnCell gelegt, da ich dort schon ne Farbenänderung vorgenommen hab. Denkantöse um die richtigen Sachen zu finden haben dann zwar nochmal ein wenig gedauert aber hier die Lösung für das Prob:

Delphi-Quellcode:
procedure TF_Hotel_App_Inhalte.DBG_Content_EigenschaftDrawColumnCell(
  Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
  const i_memoLaenge = 40;
  var s_ausgabe : String;
begin
  with (Sender as TDBGrid) do
  begin
    if (D_Datenmodul.qu_app_menue_inhalte_content_eigenschaft.RecNo mod 2) = 0 then
      Canvas.Brush.Color := clSkyBlue;

    if Column.Field.IsBlob then
    begin
      Canvas.FillRect(Rect);
      s_ausgabe := func_strVeraendernSpeichernLesen( copy(Column.Field.AsString, 1, i_memoLaenge) , false);
      Canvas.TextOut(Rect.Left+2, Rect.Top+2, s_ausgabe);
    end else begin
      DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
  end;
end;
Mit func_strVeraendernSpeichernLesen wandel ich die Sonderzecihen in die richtige Ausgabe.

Sir Rufo 15. Mär 2013 11:21

AW: DBGrid Darstellungs-Text "umwandeln"
 
Wenn es nur für diese eine Darstellung benötigt wird, dann ist das da auch richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 Uhr.

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