![]() |
dbgrid im Bearbeitungsmodus
Hallo zusammen,
ich habe ein DBGrid mit einer TColumn die ein Timestamp-Feld aus der DB anzeigt. das Feld ist per DisplayFormat HH:mm formatiert. Funktioniert fabelhaft ;-) Per Doppelklick ins Feld wird in den Bearbeitungsmodus umgeschaltet und der Feldinhalt im Format "19.07.2015 19:00:00" angezeigt und editierbar. Per Eingabe lässt sich aber auch die Uhrzeit editieren, ohne dass das komplette Format angezeigt wird. Hier nun allerdings wir der Tag automatisch auf Tag 0 (z.B. 30.12.1899 17:00:00) zurückgesetzt. Wie kann ich das verhindern ? Ich möchte den ursprünglich gespeicherten Tag erhalten. Ich danke euch |
AW: dbgrid im Bearbeitungsmodus
Zitat:
|
AW: dbgrid im Bearbeitungsmodus
indem man ohne Doppelklick den enthaltenen Wert einfach z.B. mit 14:30 überschreibt.
Damit setzt man den Tag auf 0 resp. 30.12.1899 |
AW: dbgrid im Bearbeitungsmodus
Zitat:
Das ist entscheident dafür, ob der Tag auf den 30.12.1899 gesetzt wird. |
AW: dbgrid im Bearbeitungsmodus
mit :
DisplayFormat HH:mm |
AW: dbgrid im Bearbeitungsmodus
jemand ne Idee, ob das per DisplayFormat zu handeln ist ?
Oder gibt es einen anderen Weg? Ich danke euch |
AW: dbgrid im Bearbeitungsmodus
Zitat:
Wenn Du nachdem die Zelle selektiert ist ohne darauf zu klicken eine Taste bedienst, dann kannst Du den Wert zwar editieren, aber das Grid befindet sich eigentlich nicht im Editiermodus. Aber auch wenn Du Dich im Editiermodus befindest und das Datum löschst und nur einen Zeitwert angibst, dann wird das Datum auf 0 gesetzt, da dieser Wert dann eigeneben ist, weil er nicht vorhanden ist. Gib, so wie Du es jetzt mit der Zeit gemacht hast einmal ein Datum ein z.B. 20.01.2015 dann wirst Du sehen, dass die Uhrzeit automatisch auf 00:00:00 gesetzt wird und den Wert, welche voher dastand ignoriert wird. Ich schaue mir das nochmals genauer an, wenn ich etwas mehr Zeit habe. Schau mal nach EditMask in der TField-Klasse. |
AW: dbgrid im Bearbeitungsmodus
ich danke dir
|
AW: dbgrid im Bearbeitungsmodus
alsoo,
EditMask ist wohl der richtige Weg die Eingabe zu beeinflussen. Jetzt muss ich nur noch die richtige Maske hinbekommen. Die diversen Möglichkeiten sind mir noch suspekt :-( Ich befürchte aber, das verhindert mir immer noch nicht, dass das Datum zurück gesetzt wird :-( |
AW: dbgrid im Bearbeitungsmodus
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. was meint ihr dazu ? danke gruss KH |
AW: dbgrid im Bearbeitungsmodus
doppelpost, bitte löschen
|
AW: dbgrid im Bearbeitungsmodus
Zitat:
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; |
AW: dbgrid im Bearbeitungsmodus
probier ich mal so aus,
ich danke dir |
AW: dbgrid im Bearbeitungsmodus
Ich habe in einem solchen Fall Datum und Uhrzeit auf zwei Columns aufgeteilt.
in SQL:
Code:
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.
Select cast (Zeiten.DATUM as Date) as "Datum", cast (Zeiten.DATUM as Time) as "Zeit"
|
AW: dbgrid im Bearbeitungsmodus
Zitat:
Leider lassen sich die Felder so nicht bearbeiten, trotz dass TColumn.readOnly false ist.:-( |
AW: dbgrid im Bearbeitungsmodus
Zitat:
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. |
AW: dbgrid im Bearbeitungsmodus
alsoo,
Delphi-Quellcode:
im Dataset verursacht mir unerklärliche Dinge :-(
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; Die Uhrzeit steht zu Beginn im Caption der Form und das Feld im Grid ist leer :-( |
AW: dbgrid im Bearbeitungsmodus
EDIT:
hier stand Blödsinn |
AW: dbgrid im Bearbeitungsmodus
mh, den "Blödsinn" hab ich nicht gesehen
|
AW: dbgrid im Bearbeitungsmodus
Zitat:
Zitat:
|
AW: dbgrid im Bearbeitungsmodus
Zitat:
Delphi-Quellcode:
, sondern
Text :=
Delphi-Quellcode:
. Das würde das Verhalten zumindest erklären.
Caption :=
|
AW: dbgrid im Bearbeitungsmodus
Hallo BadenPower,
(würdest du bitte deinen Test hier mal reinstellen? ich bekomme nur oben genannten Schrott hin) :-( hat sich erledigt!
Delphi-Quellcode:
allerdings unterscheidet sich bei lazarus wohl der parametername aText.procedure TForm1.ZQuery1ZEITGetText(Sender: TField; var aText: string; DisplayText: Boolean); begin Text := FormatDateTime('hh:mm', Sender.AsDateTime); end; procedure TForm1.ZQuery1ZEITSetText(Sender: TField; const aText: string); begin Sender.AsDateTime := DateOf(Sender.AsDateTime) + StrToTime(Text); end; Wenn ich diesen in Text umbenenne bekomme ich Folgendes: unit1.pas(28,54) Hint: Identifier already defined in unit CONTROLS at line 1393 EDIT : klar, wenn mein Parameter aText heisst, sollte ich in der procedure auch aText verwenden ;-) |
AW: dbgrid im Bearbeitungsmodus
Delphi-Quellcode:
procedure TForm1.ZQuery1ZEITGetText(Sender: TField; var aText: string;
DisplayText: Boolean); begin aText := FormatDateTime('hh:mm', Sender.AsDateTime); end; |
AW: dbgrid im Bearbeitungsmodus
FUNKTIONIERT!!!!!!
Ich danke euch gewaltig ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 Uhr. |
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