【问题标题】:Is it possible to set the value of a DataGridRow cell for new rows?是否可以为新行设置 DataGridRow 单元格的值?
【发布时间】:2017-10-20 21:45:50
【问题描述】:

我对 WPF 和 XAML 非常陌生,所以我可能会走错路。

我有一个使用实体框架绑定到数据源的 DataGrid。

当我向 DataGrid 添加新行时,我希望名为“已创建”的列之一自动填充当前日期和时间。

数据最终存储在 SQL Server 上。

SQL 服务器上的“Created”列不可为空,但有一个默认值“getdate()”。它在我们当前的 MS Access 应用程序中运行良好。运行手动插入查询时,只需为“已创建”列省略一个值即可触发默认值。

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

我试过了:

  • 更改模型,使列的默认值不是“(None)”而是“DateTime.Now”,我也尝试了“Now”。两者都不起作用。
  • 更改模型以使列的可为空属性为真。
  • 我尝试了 DataGridView 的“AddingNewItem”事件,但无法正常工作。
  • 我尝试了 DataGridView 的“RowEditEnding”事件,但也不知道如何让它工作。
  • 我尝试从 DataGridView 中完全删除有问题的列,但是在对 dbContext 对象调用 SaveChanges() 时,它会引发异常,指出 datetime2 到 datetime 的转换导致超出范围异常或类似的情况。确切的错误是(第一个异常是“UpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常。”):

我不知道该怎么做。我知道“视图”只应该负责呈现数据,但我不确定如何更改模型,以便该特定表的新行不发送“已创建”列的值或者在添加新行时始终传递当前日期和时间。

我已经花了好几个小时查看 WPF 文档、实体框架文档、堆栈溢出、MSDN 文档……我要拔掉头发了!任何帮助将不胜感激!

【问题讨论】:

    标签: c# wpf entity-framework xaml datagridview


    【解决方案1】:

    我很确定 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
        };
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 2015-12-11
      • 2012-09-04
      • 2011-06-16
      • 2014-11-07
      • 2012-01-05
      • 2012-12-10
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多