2016-03-25 8 views
0

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 DataGridViewCellParsing 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?

+0

warum können Sie die Bearbeitung der Daten im 'OnBound' Ereignis des Datagridview nicht tun ..? – MethodMan

+2

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. –

+0

@ 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

Antwort

0

Sie können so etwas wie dies versuchen:

private void mainGrid_CellValidated(object sender, DataGridViewCellEventArgs e) 
{ 
    //Convert time 
    (mainGrid.Rows[e.RowIndex].DataBoundItem as TimeSegment).Start = convertedValue; 
} 
Verwandte Themen