gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:52:25 25 4
gpt4 key购买 nike

我对 WPF 和 XAML 很陌生,所以我可能会以错误的方式解决这个问题。

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

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

数据最终在 SQL Server 上结束。

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

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

我试过:

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

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

我花了几个小时查看 WPF 文档、 Entity Framework 文档、Stack Overflow、MSDN 文档……我快要抓狂了!非常感谢任何帮助!

最佳答案

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

关于c# - 是否可以为新行设置 DataGridRow 单元格的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46857770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com