AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Anzeige der Felder im DBGrid verändern
Thema durchsuchen
Ansicht
Themen-Optionen

Anzeige der Felder im DBGrid verändern

Ein Thema von Fischli80 · begonnen am 12. Dez 2002 · letzter Beitrag vom 20. Dez 2002
Antwort Antwort
Seite 1 von 2  1 2      
Fischli80

Registriert seit: 4. Dez 2002
Ort: Dresden
25 Beiträge
 
Delphi 5 Professional
 
#1

Anzeige der Felder im DBGrid verändern

  Alt 12. Dez 2002, 19:52
Hallo zusammen!!

Ich möchte gerne in einem DBGrid, was sich auf eine Paradox Datenbank bezieht, die Darstellung der Felder ändern.

Ich mein damit die Zellen und nicht die Titelfelder.

Und zwar steht in der Datenbank immer ein Wert zwischen 0 und 3 und ich will je nachdem welcher Wert das ist, dass in der Spalte dann ein entsprechender String steht.

Aber wie kann ich das machen?
Oder muß ich die Datenbank ändern??
Doch wohl eher nich hoff ich!!

Wär's ne Möglichkeit irgendwie ne Art Alias-Spalte einzufügen?
Aber wie koordiniere ich den Abgleich??

Vielen Dank an Jeden der sich die Zeit nimmt dies zu lesen
Die Welt ist rund...also lasst uns von hinten angreifen
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 13. Dez 2002, 07:05
Hallo Fischli80,

dazu kannst du das Event OnGetText des TFiled-Objektes verwenden. Dort weist du dem Parameter Text den Wert zu, der angezeigt werden soll:

Delphi-Quellcode:
  case Table1FeldMitWert1bis3.AsInteger of
    1: Text := 'Eins';
    2: Text := 'Zwei';
    3: Text := 'Drei'
   else
     Text := 'Schrott';
   end;
   DisplayText := True;
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Fischli80

Registriert seit: 4. Dez 2002
Ort: Dresden
25 Beiträge
 
Delphi 5 Professional
 
#3
  Alt 13. Dez 2002, 20:20
Hmm...klingt soweit gut

Ich weiß zwar nich ob es an der fortgeschrittenen Stunde liegt, aber ich weiß nich so ganz an welche Stelle Deine Implementation rein muss.

Ich meine Du erwähntest das TField Objekt. Ist sicherlich die Spalte oder?
Aber wo genau mach ich das? Ich meine ich kann über den Objekt-Inspektor auf die Properties des DBGrid zugreifen aber die der Spalten?

Und wahrscheinlich muß dass ja mit den AfterPost bzw AfterEdit Properties von der TTable im Zusammenhang stehen oder?

Trotzdem schonmal vielen Dank!!!
Die Welt ist rund...also lasst uns von hinten angreifen
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#4
  Alt 13. Dez 2002, 20:39
Hallöle,

Du kannst doch mal vrsuchen in der Object Hierarchie nach den einzelnen Spalten suchen, wenn Du eine Markiert hast, schaust dann wieder im Object Inspector unter Eigenschaften. Da müsste irgendwo OnGetText stehen. Da machst DU ein Doppelklick drauf und da kommt dann der Code rein.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Fischli80

Registriert seit: 4. Dez 2002
Ort: Dresden
25 Beiträge
 
Delphi 5 Professional
 
#5
  Alt 13. Dez 2002, 20:55
Ja schon klar

Aber leider kann ich nicht über den Objektinspektor auf die Spalten einer DBGrid zugreifen um deren Methoden oder Ereignisse zu verändern. Ich hab nur Zugriff auf die Eigenschaften des ganzen DBGrid und da kann ich die OnGetText Methode nich definieren.

Ich müsste dass schon igendwie zur Laufzeit machen. Der Tip von MrSpock klingt ja vielversprechend, ich weiß nur nich wo ich ihn genau implementieren soll
Die Welt ist rund...also lasst uns von hinten angreifen
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6
  Alt 14. Dez 2002, 20:24
Hallo Fischli80,

das OnGetText gehört auch nicht zum Grid, sondern zu der zugrundeliegenden Tabelle/Abfrage. Wenn du die Tabelle doppelklickst, öffnet sich der Feldeditor. Durch Rechtsklick fügst du einzelne oder alle Felder hinzu. Wenn du dann ein bestimmtes Feld anklickst, zeigt der Objektinspektor das entsprechende Feld an. Dort findest du dann dan OnGetText Ereignis.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Fischli80

Registriert seit: 4. Dez 2002
Ort: Dresden
25 Beiträge
 
Delphi 5 Professional
 
#7
  Alt 18. Dez 2002, 21:21
Sorry das ich so lang nich reagiert hab!!

Also die Idee von MrSpock ist schon okay.
Funzt nur nich bei mir.

Und zwar beschwert sich Delphi zur Laufzeit, dass ein Spaltenfeld der Tabelle nich existiert, welches ich anspreche.

Ich erzeuge nämlich die Felder der Tabelle immer manuell beim laden bzw anlegen einer Datenbank. Und wenn ich dass schon in der Entwicklungsumgebung mache, dann klappts nich. Selbst wenn ich die jeweilige Spalte nich manuell anlegen lasse, sondern nur im Feldeditor einfüge. Das harmoniert einfach nich

Wie kann ich das ändern, falls jemand mein wirrwarr noch durchblickt
Die Welt ist rund...also lasst uns von hinten angreifen
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#8
  Alt 19. Dez 2002, 07:22
Hallo Fischli80,

wie war das im Mittelteil?

Kannst du einmal beschreiben, was du genau machst? Öffnest oder erzeugst du mit deinem Programm verschiedene Tabellen mit unterschiedlichen Strukturen, die zur Programmerstellung noch unbekannt sind? Falls ja, d.h. du kennst die Struktur nicht, was genau willst du dann in der Darstellung von welchen Feldern ändern?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Fischli80

Registriert seit: 4. Dez 2002
Ort: Dresden
25 Beiträge
 
Delphi 5 Professional
 
#9
  Alt 19. Dez 2002, 17:37
Also.....

Ich verwalte eine Paradox Datenbank, welche aus zwei Tabellen besteht. Also noch recht überschaubar das Ganze.

Ich binde meine Tabelle immer zur Laufzeit ein, nachdem über einen Dialog entweder eine existierende Tabelle gewählt wurde, oder der User eine neue anlegen läßt.



Als erstes lege ich die Tabelle abstrakt an:

Code:

  with Form1.MyTable do
  begin

    active:=false;
    DatabaseName:=dBname; // wird nach Auswahldialog übergeben

    TableName:='media.db';
    TableType:=ttParadox;

    with FieldDefs do
    begin

      clear;

      Add('ColID', ftAutoInc, 0, false);
      Add('Col1', ftString, 30, false);
      Add('Col2', ftString, 30, false);

    end;

  end;
Dann kommen die Index-Definitionen für die Spalten:

Code:

  with Form1.MyTable.IndexDefs do
  begin

     Add ('', 'ColID', [ixPrimary]);
     Add ('Col1', 'Col1', [ixCaseInsensitive]);
     Add ('Col2', 'Col2', [ixCaseInsensitive]);

  end;

  Form1.MyTable.IndexName := Form1.MyTable.IndexDefs.Items[1].Name;
Und nun wird die Tabelle erzeugt:

Code:

    CreateTable;
Beim öffnen einer existierenden Datenbank wird natürlich kein Create gebraucht und auch sonst werden die FieldDefs natürlich nich gemacht, da die Tabelle die ja schon hat.

Sooo......lange Rede kurzer Sinn....ich möchte nun im eigentlichen nur in meinem DBGrid, welches meine Table darstellt, eine Spalte haben, in welcher die Werte anders dargestellt werden als sie in der Tabelle sind. Also entweder ne neue Spalte welche dann halt immer ne Art:

Code:

Case Col[i].Value Of

  0: Col[2].Value := "Typ A"
  1: Col[2].Value := "Typ B"
  2: Col[2].Value := "Typ C"

  else Col[2].Value := "Typ unbekannt"

end;
...macht. Oder halt dass die Originalspalte das von alleine schafft.

In diese Szenario ist mein Feldeditor also leer, da die FieldDefs erst zur Laufzeit kommen. Aber auf deren OnGetText Property kann ich nich zugreifen in meiner Entwicklungsphase. Und wenn ich die FieldDefs im Feldeditor erstellen lasse, dann meckert Delphi nur noch rum, sobald er halt selber die FieldDefs zur Laufzeit anlegen will. Unterlass ich das nochmalige anlegen, sagt er mir dass er die Felder nich findet. Iss irgendwie verzwackt

Ich hoffe das diese epische Breite mein Problem richtig erläutert

Aber ich habe dass Gefühl das Ihr da draussen ganz helle Köpfe seit und mir helfen könnt. Insbesondere MrSpock

Tschüssie 8)
Die Welt ist rund...also lasst uns von hinten angreifen
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#10
  Alt 19. Dez 2002, 20:25
Hallo Fischli80,

wenn die Struktur der Tabelle immer gleich ist, gibt es eine einfache Lösung. Du erstellst eine "Beispieltabelle" über die Datenbankoberfläche, fügst die Felder der Tabelle über den Feldeditor des TTable Objects in deine Anwendung ein, fügst der OnGetText Methode den Code hinzu, der für die Anzeige die Ersetzung durchführt.

Beim Anlegen einer neuen Tabelle, machst du jetzt nicht anderes, als dem bestehenden TTable Object einen neuen TableName zuzuweisen und anschließend die Methode CreateTable dieses TTable Objects aufzurufen. Die Einstellungen werden aufgrund derselben Struktur alle übernommen.
Albert
Live long and prosper


MrSpock
  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 12:07 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