是否可以为新行设置DataGridRow单元格的值?

时间:2017-10-20 21:45:51

标签: c# wpf entity-framework xaml datagridview

我是WPF和XAML的新手,所以我可能会以错误的方式解决这个问题。

我有一个使用Entity Framework绑定到数据源的DataGrid。

当我向DataGrid添加一个新行时,我希望其中一个列名为" Created"自动填充当前日期和时间。

数据最终会在SQL Server上结束。

"创建" SQL服务器上的列不可为空,但默认值为" getdate()。"它与我们当前的MS Access应用程序一起工作正常。在运行手动插入查询时,只需省略"创建"的值。列触发默认值。

新行使用默认值" 1/1/0001 12:00:00 AM"尽管SQL服务器的默认值是" getdate(),而不是当前的日期和时间。"

我试过了:

  • 更改模型,以便列的默认值为&#t;"(无)"但是" DateTime.Now,"我也试过了#34;现在。"两者都没有。
  • 更改模型以使列的可空属性为真。
  • 我尝试了DataGridView" AddingNewItem"事件,但无法使其发挥作用。
  • 我尝试过DataGridView" RowEditEnding"事件,但无法弄清楚如何让它发挥作用。
  • 我尝试从DataGridView中完全删除有问题的列,但是当在dbContext对象上调用SaveChanges()时,它会抛出一个异常,说明datetime2到datetime的转换导致超出范围的异常或沿着这些行。确切的错误是(第一个异常是" UpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常。"):Error

我不知道该怎么做。我知道"查看"只应该负责显示数据,但我不确定如何更改模型,以便此特定表的新行不会为"创建&#34发送值;列或总是在添加新行时传递当前日期和时间。

我花了好几个小时看WPF文档,实体框架文档,Stack Overflow,MSDN文档......我即将脱掉头发!任何帮助都会非常,非常感谢!

1 个答案:

答案 0 :(得分:3)

我非常确定DataGrid.AddingNewItem事件是您想要的事件。尝试这样的事情:

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

然后在您的代码隐藏中:

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