Delphi-PRAXiS
Seite 2 von 3     12 3      

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/)
-   -   dbgrid im Bearbeitungsmodus (https://www.delphipraxis.net/185903-dbgrid-im-bearbeitungsmodus.html)

khh 20. Jul 2015 09:24

AW: dbgrid im Bearbeitungsmodus
 
doppelpost, bitte löschen

Uwe Raabe 20. Jul 2015 10:07

AW: dbgrid im Bearbeitungsmodus
 
Zitat:

Zitat von khh (Beitrag 1309226)
ich habe mir überlegt, per Data.DB.TField.OnGetText und Data.DB.TField.OnSetText

das Datum zu speichern und mit der eingegebenen Zeit wieder zurück zu schreiben.

Sowas ähnliches wollte ich auch gerade vorschlagen. Du kannst im OnGetText dem Anzeige- und Editstring den reinen Uhzeit-Text geben und beim OnSetText liest du den Feldwert aus (da steht das Datum nämlich noch drin) und änderst lediglich den Zeitanteil.

Delphi-Quellcode:
procedure TForm19.ClientDataSet1MyFieldGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
  Text := FormatDateTime('hh:mm', Sender.AsDateTime);
end;

procedure TForm19.ClientDataSet1MyFieldSetText(Sender: TField; const Text: string);
begin
  Sender.AsDateTime := DateOf(Sender.AsDateTime) + StrToTime(Text);
end;

khh 20. Jul 2015 10:33

AW: dbgrid im Bearbeitungsmodus
 
probier ich mal so aus,

ich danke dir

bcvs 20. Jul 2015 11:24

AW: dbgrid im Bearbeitungsmodus
 
Ich habe in einem solchen Fall Datum und Uhrzeit auf zwei Columns aufgeteilt.

in SQL:
Code:
Select cast (Zeiten.DATUM as Date) as "Datum", cast (Zeiten.DATUM as Time) as "Zeit"
Vor dem Speichern muss man die beiden Werte halt wieder zusammenfügen. Es ist dann aber immer klar, was geändert wird, Datum oder Uhrzeit.

khh 20. Jul 2015 12:17

AW: dbgrid im Bearbeitungsmodus
 
Zitat:

Zitat von bcvs (Beitrag 1309254)
Ich habe in einem solchen Fall Datum und Uhrzeit auf zwei Columns aufgeteilt.

in SQL:
Code:
Select cast (Zeiten.DATUM as Date) as "Datum", cast (Zeiten.DATUM as Time) as "Zeit"
Vor dem Speichern muss man die beiden Werte halt wieder zusammenfügen. Es ist dann aber immer klar, was geändert wird, Datum oder Uhrzeit.

hab ich auch grad mal so versucht.
Leider lassen sich die Felder so nicht bearbeiten, trotz dass TColumn.readOnly false ist.:-(

BadenPower 20. Jul 2015 12:19

AW: dbgrid im Bearbeitungsmodus
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1309232)
Zitat:

Zitat von khh (Beitrag 1309226)
ich habe mir überlegt, per Data.DB.TField.OnGetText und Data.DB.TField.OnSetText

das Datum zu speichern und mit der eingegebenen Zeit wieder zurück zu schreiben.

Sowas ähnliches wollte ich auch gerade vorschlagen.

Wenn er nur die Zeit ändern möchte ist dies mit OnGetText/OnSetText natürlich eine einfache Lösung.


Allerdings sollte man noch berücksichtigen, dass eventuell ein Ändern des Datums und nicht nur der Uhrzeit erwünscht/notwendig sein könnte.

Hier müsste man dann den eingegebenen Wert in einen DateTime-Wert umwandeln und prüfen, ob ein Datum welches sich vom vorhandenen Datum unterscheidet vorhanden ist, oder ob es sich um den 30.12.1899 handelt.

khh 20. Jul 2015 12:54

AW: dbgrid im Bearbeitungsmodus
 
alsoo,

Delphi-Quellcode:
procedure TForm19.ClientDataSet1MyFieldGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
  Text := FormatDateTime('hh:mm', Sender.AsDateTime);
end;

procedure TForm19.ClientDataSet1MyFieldSetText(Sender: TField; const Text: string);
begin
  Sender.AsDateTime := DateOf(Sender.AsDateTime) + StrToTime(Text);
end;
im Dataset verursacht mir unerklärliche Dinge :-(

Die Uhrzeit steht zu Beginn im Caption der Form und das Feld im Grid ist leer :-(

BadenPower 20. Jul 2015 13:30

AW: dbgrid im Bearbeitungsmodus
 
EDIT:
hier stand Blödsinn

khh 20. Jul 2015 14:38

AW: dbgrid im Bearbeitungsmodus
 
mh, den "Blödsinn" hab ich nicht gesehen

BadenPower 20. Jul 2015 14:56

AW: dbgrid im Bearbeitungsmodus
 
Zitat:

Zitat von khh (Beitrag 1309283)
mh, den "Blödsinn" hab ich nicht gesehen

Macht nichts, denn was da stand, war nicht richtig.


Zitat:

Zitat von khh (Beitrag 1309268)
alsoo,

Delphi-Quellcode:
procedure TForm19.ClientDataSet1MyFieldGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
  Text := FormatDateTime('hh:mm', Sender.AsDateTime);
end;

procedure TForm19.ClientDataSet1MyFieldSetText(Sender: TField; const Text: string);
begin
  Sender.AsDateTime := DateOf(Sender.AsDateTime) + StrToTime(Text);
end;
im Dataset verursacht mir unerklärliche Dinge :-(

Die Uhrzeit steht zu Beginn im Caption der Form und das Feld im Grid ist leer :-(

Der Code von Uwe funktioniert perfekt und müßte meiner Meinung nach genau das abdecken, was Du willst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz