Autor |
Beitrag |
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Mo 12.06.06 22:34
Ich arbeite mit DBGrids und will die Spaltenüberschrift vom Programm aus ändern (deutsch und englisch)
Bisher mache ich das mit folgendem Befehl:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| DBGridPers.Columns[0].Title.Caption := 'PersId'; DBGridPers.Columns[1].Title.Caption := 'First Name'; DBGridPers.Columns[2].Title.Caption := 'Last Name'; DBGridPers.Columns[3].Title.Caption := 'Street'; DBGridPers.Columns[4].Title.Caption := 'Postcode'; DBGridPers.Columns[5].Title.Caption := 'Town'; |
Dazu muss ich aber mit Persistenten Feldern arbeiten (was ich vermeiden möchte),
da ich sonst keinen Index habe auf den ich zugreifen kann.
Gibt es in diesem Fall eine Möglichkeit ohne Persistente Felder auszukommen ?
(außer mit Stringrid arbeiten)
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 13.06.06 07:56
Du kannst auch auf dein DataSet zugreifen, mit dem dein DBGrid über die DataSource verbunden ist. Entweder gehst du über die Fields-Eigenschaft des DataSets auf die Überschriften oder FieldByName.
Wenn du auf meiner WebSite im Download-Bereich nachschaust, findest du dort die Komponente "Feld-Formatierer". Die liegt mit Source und Kurzanleitung vor. Damit kannst du dir INI-Dateien erstellen, die du in Verbindung mit einem DBGrid laden kannst. Du kannst damit auch noch einige andere Dinge steuern.
|
|
SmileySN 
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Di 13.06.06 21:15
Ich habe mir Dein BitByter angesehen, kann das Package aber nicht installieren mit D7.
Er erzählt erst mal bei laden was von "Falschem Format" und "umwandeln" und beim Installieren was von "Falsche version"
In der .pas Datei konnte ich an einer Stelle was erkennen, das mir weiterhelfen sollte, aber nur zum Teil.
Wenn ich den SpaltenText des Grid änder will, dann sollte ich wie Du sagst den Feldnamen des Dataset ändern.
Das fängt an mit Datasourcename.Dataset.FielsByName('Feldname')..... hier finde ich nichts was mir hilft.
DisplayName und DisplayText sind nur ReadOnly, und FieldName macht mir auch Probleme.
Hilf mir bitte noch ein Stück weiter.
Damit ändere ich aber hoffentlich nicht den Feldnamen in der Datenbank, denn die geänderte Anzeige soll ja nur für diesen Client wirken.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 13.06.06 21:23
Die gesuchte Eigenschaft heißt DisplayLabel.
Warum die Komponente bei dir nicht funktioniert, kann ich im Moment nicht sagen. Programmiert wurde das mit Delphi 5. Bei mir benutze ich inzwischen eine Test-Variante für Delphi 2005. Die kann ich aber noch nicht frei geben, da sich einiges geändert hat.
|
|
SmileySN 
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Di 13.06.06 21:59
Prima, mit DisplayLabel funktioniert es, nur scheint mir der Name immer wieder überschrieben zu werden.
Außerdem habe ich einen ganz merkwürdigen Effekt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.FormActivate(Sender: TObject); begin AktSprache:='E'; SpracheLaden(AktSprache); SelectFirma; DatenlesenFirma;
DM.DSFirmaPersGrid.DataSet.FieldByName('Name').DisplayLabel:='Nameneu';
EdFirmaName.SetFocus; end; |
An dieser Stelle wird im Grid der neue Name nicht angezeigt, wenn ich aber die Zeile
DM.DSFirmaPersGrid.DataSet.FieldByName('Name').DisplayLabel:='Nameneu';
unter die .Setfocus Zeile setze, dann wird der Name geändert angezeigt.
Was hat das denn zu bedeuten ?
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 14.06.06 07:58
Überschrieben wird das eigentlich immer nur, wenn du dein DataSet schließt und wieder öffnest. Das machst du vermutlich in "DatenlesenFirma". Jedes "Open" führt zu einem erneuten einlesen der Daten und kann führt dazu, dass deine Einstellung für DisplayLabel verloren geht.
Tipp:
Mache die Zuweisung des DisplayLabel in deiner Prozedur "DatenlesenFirma". Dein DataSet ist das dort benutzte Query oder Table. du sparst dir das "DM.DSFirmaPersGrid.". DataSet musst du dann natürlich durch dein Query oder Table ersetzen.
Deinen Effekt kann ich im Moment nicht nachvollziehen. Ich mache das seit Jahren so, ohne den von dir beschreibenen Effekt.
Evtl machst du beim OnEnter von EdFirmaName noch irgenetwas mit dem DataSet.
|
|
SmileySN 
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Mi 14.06.06 09:49
Danke Jasocul, so hatte ich es mir auch vorgestellt, dass ich das umbenennen in das DatenLesen mit hineinnehme.
Das mit dem OnEnter-Ereignis werde ich noch mal nachsehen, gute Idee. Soweit ich mich erinnere, habe ich aber nur im OnKeypress meine Tasten-Filterung eingebaut. Das ist aber dann wohl gleichgültig, wenn ich das Feld selbst ändere.
Ist das hier so richtig, wenn QPers mein Query ist das angezeigt wird:
Delphi-Quelltext 1:
| DM.DSFirmaPersGrid.QPers.FieldByName('Name').DisplayLabel:='Nameneu'; |
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 14.06.06 09:51
|
|
SmileySN 
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Mi 14.06.06 10:04
Danke, das geht ja superschnell.
Leider muss ich jetzt raus zum Kunden, kann es nicht ausprobieren.
Setze mich dran, wenn ich wieder da bin.
|
|