Ich erstelle eine Anwendung für die Protokollierung der Mitarbeiterzeit. Alle Zeitdaten für alle Benutzer werden in einer SQL-Datenbank in UTC gespeichert. Das Front-End wird eine Windows Forms-App sein, die Zeit anzeigt und Eingaben in der lokalen Zeitzone des Benutzers akzeptiert. Die WinForms-App verfügt über ein Steuerelement DataGridView
, wo die Zeit angezeigt und von Benutzern eingegeben wird.WinForms DataGridView - Benutzereingaben vor dem Schreiben in DataSource bearbeiten
Die DataGridView
ist an eine List
von TimeSegment
Objekte gebunden. TimeSegment
ist eine Struktur I geschaffen, die im Grunde ist dies:
struct TimeSegment
{
private DateTime start, end;
public TimeSegment(DateTime start, DateTime end){
Start = start;
End = end;
}
public DateTime Start
{
get { return start; }
set {
if (value.Kind != DateTimeKind.Utc)
throw new ArgumentException("Only UTC dates are allowed.");
start = value;
}
}
//There is an End property which is just like the Start
//property, but for the 'end' field.
}
So in den DataGridView
, es wird mit jeder Zeile eine Spalte von Startzeiten und eine Spalte von Endzeit, sein ein Ereignis oder eine Aufgabe ausgeführt ein Benutzer darstellt.
Ich weiß, wie die interne UTC-Zeit in die lokale Zeitzone für die Anzeige mithilfe des Ereignisses DataGridView.CellFormatting
konvertieren. Das Problem, das ich habe, besteht darin, Benutzereingaben in lokaler Zeit zu nehmen und in UTC zu konvertieren, bevor das Update an die DataSource
der DataGridView
gesendet wird.
Ich habe zeigt mehrere andere Beiträge gesehen, wie der Text in der Zelle auf DataGridView
‚CellParsing
oder CellValidating
Ereignisse s zu ändern, aber ich brauche das eigentliche Objekt zu ändern, dass der Text so analysiert wird, die an die DataSource
gesendet wird .
Gibt es eine Möglichkeit, das Analyseverhalten der Zelle zu überschreiben und anzugeben, welches Objekt an die DataSource gesendet werden soll?
warum können Sie die Bearbeitung der Daten im 'OnBound' Ereignis des Datagridview nicht tun ..? – MethodMan
Ist das Ereignis [DataGridView.CellParsing] (https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellparsing (v = vs.110) .aspx) genau dafür nicht ? Auch das Beispiel in der Dokumentation zeigt die Konvertierung in UTC. –
@ MethodMan - Ich sehe kein DataGridView.OnBound-Ereignis./@ Ivan - Danke, ich habe diese Seite gerade erst wieder besucht, bevor ich hier wieder eingecheckt habe. Ich denke, das ist die Antwort. – JamesFaix