Entwickler-Ecke
Datenbanken - Spaltentext in DBGrid ändern
SmileySN - Mo 12.06.06 22:34
Titel: Spaltentext in DBGrid ändern
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 - 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 - 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 - 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 - 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 - 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. :nixweiss:
Evtl machst du beim OnEnter von EdFirmaName noch irgenetwas mit dem DataSet.
SmileySN - 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 - Mi 14.06.06 09:51
SmileySN hat folgendes geschrieben: |
Ist das hier so richtig, wenn QPers mein Query ist das angezeigt wird:
Delphi-Quelltext 1:
| DM.DSFirmaPersGrid.QPers.FieldByName('Name').DisplayLabel:='Nameneu'; | |
Nö. Geht viel einfacher:
Delphi-Quelltext
1:
| QPers.FieldByName('Name').DisplayLabel:='Nameneu'; |
SmileySN - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!