0

我有一个非常简单的带有实体框架的 Windows 窗体项目。

只需我从“表单”中的“数据源”选项卡中拖动表格,它就会为我生成一个“DataGridView”和一个“BindingSource”。

数据绑定成功,当我运行项目时,我可以看到“DataGridView”正确填充了数据,并且可以从“DataGridView”更新任何单元格值。

问题是我无法在“DataGridView”中插入任何行。

这是我写的一些代码,希望对解决问题有用:

    Teachers_DBEntities context = new Teachers_DBEntities();

    private void SaveItem_Click(object sender, EventArgs e)
    {
        context.SaveChanges();
        MessageBox.Show("saved successfully");
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        teachers_tableBindingSource.DataSource = context.teachers_table.ToList();
    }

更新评论

我测试了我的“BindingSource”,发现它成功理解了是否在“DataGridVeiw”中插入了新记录,但是当我调用时,更改不会应用于数据库context.savechanges();

context.savechanges()当我更新单元格时工作正常,但当我尝试在“DataGridView”中插入新记录时它不起作用。

在我的 edmx 文件中,我正确映射了所有列,主键StoreGeneretedPattern属性设置为Identity,其Entity Key属性设置为true. 它auto-increment在我的 SQL Server 数据库文件中的属性设置为true.

任何帮助表示赞赏。

4

4 回答 4

2

context.savechanges() 在我更新单元格时工作正常,但当我尝试在“DataGridView”中插入新记录时它不起作用。

“它不起作用”是什么意思?新记录没有出现在数据库中?当然不会。

在这一行

teachers_tableBindingSource.DataSource = context.teachers_table.ToList();

你打破DataSource了与上下文的联系。插入其中的任何新项目都不会插入到teachers_table中,而是插入到List您在其上创建的中。

于 2012-08-03T07:40:27.633 回答
1
using (var context = new YourEntities ()) 
{
     var dpt = new yourObject { Name = "Test" };
     context.yourObject.Add(dpt);
     context.SaveChanges(); 
}

您缺少在上下文中添加对象

于 2012-08-03T07:47:04.640 回答
0

在 .Net 4.5 中,当我删除 ToList() 时出现此错误:

不支持将数据绑定到商店查询。

而是使用数据填充DbSet,例如通过在 DbSet 上调用 Load,然后绑定到本地数据。

于 2019-03-06T15:55:22.193 回答
0

我有同样的问题。经过很多小时,我终于找到了自己的解决方案......

我正在使用 C#、.Net 框架、实体框架 6.4

如果我设置

teachers_tableBindingSource.DataSource = context.teachers_table.ToList();

数据在 DB 中更新但未插入。

如果我设置(按照建议)

teachers_tableBindingSource.DataSource = context.teachers_table;

我得到错误:

System.NotSupportedException HResult=0x80131515 Mensaje = 不支持直接将数据绑定到存储查询(DbSet、DbQuery、DbSqlQuery、DbRawSqlQuery)。而是使用数据填充 DbSet,例如通过在 DbSet 上调用 Load,然后绑定到本地数据。对于 WPF 绑定到 DbSet.Local。对于 WinForms 绑定到 DbSet.Local.ToBindingList()。对于 ASP.NET WebForms,您可以绑定到对查询调用 ToList() 的结果或使用模型绑定,有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=389592

最后我得到了这个提示的答案:

context.teachers_table.Load(); //Load records in this DataSet<>

teachers_tableBindingSource.DataSource = context.teachers_table.Local.ToBindigngList();

现在它起作用了。数据在数据库中被正确删除、插入和更新。

于 2021-11-17T15:22:11.660 回答