2017-10-20 1 views
1

Ich bin sehr neu in WPF und XAML, damit ich vielleicht in die falsche Richtung gehe.Ist es möglich, den Wert einer DataGridRow-Zelle für neue Zeilen festzulegen?

Ich habe ein DataGrid, das mit dem Entity Framework an eine Datenquelle gebunden ist.

Wenn ich dem DataGrid eine neue Zeile hinzufüge, möchte ich, dass eine der Spalten namens "Created" automatisch mit dem aktuellen Datum und der aktuellen Uhrzeit ausgefüllt wird.

Die Daten landen letztlich auf einem SQL Server.

Die "Created" -Spalte auf dem SQL-Server ist nicht Nullable, hat aber einen Standardwert von "getdate()". Es hat mit unserer aktuellen MS Access-Anwendung gut funktioniert. Wenn Sie manuelle Einfügeabfragen ausführen, wird einfach der Wert für die Spalte "Erstellt" ausgelassen.

Eine neue Zeile verwendet den Standardwert "1/1/0001 12:00:00 AM" anstelle des aktuellen Datums und der aktuellen Uhrzeit, obwohl der SQL Server-Standardwert "getdate()" lautet.

Ich habe versucht:

  • Das Modell ändern, so dass der Standardwert der Spalte nicht war „(None)“, sondern war „DateTime.Now:“ Ich habe auch versucht, nur „Jetzt.“ Keine funktionierte.
  • Ändern des Modells, sodass die Nullwerteigenschaft der Spalte wahr ist.
  • Ich versuchte das "AddingNewItem" -Ereignis des DataGridView, konnte es aber nicht zum Laufen bringen.
  • Ich habe das "RowEditEnding" -Ereignis der DataGridView versucht, konnte aber auch nicht herausfinden, wie es funktioniert.
  • Ich habe versucht, vollständig die betreffende Spalte aus der Datagridview zu entfernen, aber wenn Savechanges() auf dem DbContext Objekt aufrufen, wirft es eine Ausnahme zu sagen die Umwandlung von datetime2 in Datetime einen außerhalb der Reichweite Ausnahme oder etwas in diese Richtung verursacht. Der genaue Fehler ist (Die erste Ausnahme ist „UpdateException: Ein Fehler ist aufgetreten, während die Einträge zu aktualisieren Siehe innere Ausnahme für weitere Einzelheiten..“): Error

Ich bin mir nicht sicher, wie dies zu tun. Ich weiß, dass die "Ansicht" nur für das Präsentieren der Daten zuständig sein soll, aber ich bin mir nicht sicher, wie ich das Modell so ändern kann, dass neue Zeilen für diese bestimmte Tabelle keinen Wert für die "Created" -Spalte senden oder beim Hinzufügen einer neuen Zeile immer das aktuelle Datum und die aktuelle Uhrzeit übergeben.

Ich habe Stunden damit verbracht, WPF-Dokumentation, Entity Framework-Dokumentation, Stack Overflow, MSDN-Dokumentation zu lesen ... Ich bin dabei, mir die Haare auszuziehen! Jede Hilfe wäre sehr, sehr geschätzt!

Antwort

2

Ich bin ziemlich sicher, dass das DataGrid.AddingNewItem-Ereignis das gewünschte ist. Probieren Sie etwas wie folgt aus:

<DataGrid ItemsSource="{Binding Collection}" 
      CanUserAddRows="True" 
      AddingNewItem="DataGrid_AddingNewItem"> 

Und dann in Ihrem Code-Behind:

private void DataGrid_AddingNewItem(object sender, AddingNewItemEventArgs e) 
{ 
    e.NewItem = new Model 
    { 
     Created = DateTime.Now //whatever you put here will be the default value 
    }; 
} 
+0

Dies sollte die akzeptierte Antwort. – acer

+0

Das hat funktioniert! Vielen Dank! Ich schätze Ihre Hilfe! –

Verwandte Themen