2017-10-20 41 views
1

Je suis très nouveau sur WPF et XAML, donc je vais peut-être me tromper.Est-il possible de définir la valeur d'une cellule DataGridRow pour les nouvelles lignes?

J'ai un DataGrid lié à une source de données en utilisant Entity Framework.

Lorsque j'ajoute une nouvelle ligne au DataGrid, j'aimerais que l'une des colonnes nommées "Créé" s'affiche automatiquement avec la date et l'heure actuelles.

Les données finissent par se terminer sur un serveur SQL.

La colonne "Créé" sur le serveur SQL n'est pas Nullable, mais a la valeur par défaut "getdate()". Cela fonctionne correctement avec notre application MS Access actuelle. Lors de l'exécution de requêtes d'insertion manuelle, il suffit d'omettre une valeur pour la colonne "Créé" pour déclencher la valeur par défaut.

Une nouvelle ligne utilise la valeur par défaut "1/1/0001 12:00:00 AM" au lieu de la date et l'heure actuelles, malgré que la valeur par défaut du serveur SQL soit "getdate()".

J'ai essayé:

  • changer le modèle de telle sorte que la valeur par défaut de la colonne n'a pas été « (Aucun) » mais était « DateTime.Now, » J'ai aussi essayé juste « Maintenant. » Ni travaillé.
  • Modification du modèle pour que la propriété nullable de la colonne soit true.
  • J'ai essayé l'événement "AddingNewItem" de DataGridView, mais je n'ai pas réussi à le faire fonctionner.
  • J'ai essayé l'événement "RowEditEnding" de DataGridView, mais je n'ai pas réussi à comprendre comment le faire fonctionner.
  • J'ai essayé de supprimer complètement la colonne en question de DataGridView mais lors de l'appel de SaveChanges() sur l'objet dbContext, il émet une exception disant que la conversion de datetime2 en datetime provoque une exception hors plage ou quelque chose le long de ces lignes. L'erreur exacte est (La première exception est « UpdateException: Une erreur est survenue lors de la mise à jour des entrées Voir l'exception interne pour plus de détails. ».): Error

Je ne sais pas comment faire. Je sais que la "Vue" est seulement censée être responsable de la présentation des données, mais je ne suis pas sûr de savoir comment changer le Modèle afin que les nouvelles lignes pour cette table particulière n'envoient pas de valeur pour la colonne "Créé" ou passez toujours la date et l'heure en cours lors de l'ajout d'une nouvelle ligne.

J'ai passé des heures à consulter la documentation WPF, la documentation Entity Framework, Stack Overflow, la documentation MSDN ... Je suis sur le point de sortir mes cheveux! Toute aide serait grandement appréciée!

Répondre

2

Je suis assez sûr que l'événement DataGrid.AddingNewItem est celui que vous voulez. Essayez quelque chose comme ceci:

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

Et puis dans votre 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

Cela devrait être la réponse acceptée. – acer

+0

Ça a marché! Merci! J'apprécie ton aide! –