【问题标题】:Unable to add new record to DB using collection bound datagrid无法使用集合绑定数据网格向数据库添加新记录
【发布时间】:2019-06-06 02:23:07
【问题描述】:

我有一个 WPF DataGrid,它绑定到通过实体框架查询填充的 ObservableCollection。我可以对 DataGrid 的内容进行编辑,但由于某种原因,我无法添加新记录。我可以在新行中添加数据,但是当我单击保存时,新记录永远不会保存到数据库中。

这是我的收藏的声明方式

public ObservableCollection<Camp> Camps { get; private set; }

填充

Camps = new ObservableCollection<Camp>( await ctx.Camps.Include( "Applications.Applicant" ).OrderByDescending( c => c.StartDate.Year ).ToListAsync() );

并绑定到数据网格

<DataGrid MinHeight="300" ItemsSource="{Binding Camps}" SelectedItem="{Binding SelectedCamp}" AutoGenerateColumns="False"
                      CanUserResizeRows="True" CanUserResizeColumns="True" CanUserSortColumns="True" CanUserReorderColumns="True" CanUserAddRows="True">

这是应该将记录添加到数据库的保存方法

private async void SaveEntry()
{
    // Okay something is going on so that new records don't get added if they are created through the DG.
    var test = ctx.ChangeTracker.HasChanges(); // Just for testing

    if ( ctx.ChangeTracker.HasChanges() )
    {
        // Save changes
        await ctx.SaveChangesAsync();
    }
}

当我查看“测试”变量时,当我添加记录时,ChangeTracker 永远不会显示为真。如果我修改网格中的现有记录,它可以正常工作。将记录添加到数据网格时是否未将记录添加到 ObservableCollection?如何从数据网格中添加记录?

【问题讨论】:

    标签: c# wpf wpfdatagrid


    【解决方案1】:

    ObservableCollection&lt;Camp&gt; 和上下文之间没有内置同步,因此当新的 Camp 对象添加到 ObservableCollection&lt;Camp&gt; 时,您应该将其添加到上下文中。您可以通过处理ObservableCollectionCollectionChanged 事件来做到这一点:

    Camps.CollectionChanged += (ss, ee) =>
    {
        switch(ee.Action)
        {
            case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
                Camp newObject = ee.NewItems[0] as Camp;
                ctx.Camps.Add(newObject);
                break;
        }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多