c# - DataGridView 是可编辑的,但不会使用 Entity Framework 将更改发送回数据库

标签 c# .net winforms entity-framework datagridview

我已将我的 DataGridView 绑定(bind)到我的 ComboBox 以便无论在 ComboBox 中选择什么值,SID 和 Mark 的相应值将出现在 DataGridView 中。 DataGridView 在我执行此操作时是可编辑的,但数据在输入时未保存在数据库中。有没有办法更新它?如果有另一种方法,我必须首先警告我只需要 DataGridView 中的 SID 和 Mark,如果我尝试将整个“Student_Course”表绑定(bind)到 DataGridView 我获取我不需要的其他列。

private void cboeCID_SelectedIndexChanged_1(object sender, EventArgs e)
{
    var CID = Convert.ToInt32(cboeCID.Text);
    using (var db = new Entities2())
    {
        var course = from c in db.Student_Course
                     where c.CID == CID
                     select new Class1
                     {
                         SID = c.SID,
                         Mark = c.Mark
                     };
        editDataGridView.DataSource = course.ToList();
        Validate();
        editDataGridView.EndEdit();
        editDataGridView.Update();
    }
}

class Class1
{
    public int SID { get; set; }
    public int Mark { get; set; }

}

最佳答案

上面的代码有一些重要的问题:

  1. 您将查询结果调整为自定义 Class1,这不是您的实体类型。

  2. 您使用了 DbContextusing 语句中,这意味着 db 在 using 语句之后处理,不会跟踪更改。

  3. 您在您的 DbContext 的另一个实例上调用了 SaveChanges,它不知道更改,所以没有任何反应。

要解决上述问题,请考虑以下提示:

  1. 创建db作为Form的字段,并在FormLoad事件中实例化,并用于加载和保存数据。
  2. 您可以这样加载数据实体:

    db = new Entities2();
    db.Student_Course.Where(x => c.CID== CID).ToList();
    editDataGridView.DataSource = db.Student_Course.Local; 
    
  3. 您可以这样保存数据:

    editDataGridView.EndEdit();
    db.SaveChanges();
    
  4. 如果您需要使用与您的实体不同的 View 模型进行编辑,在保存更改时,您应该首先使用上下文的另一个实例从数据库加载原始实体,然后为每个实体设置更改字段的值和然后调用SaveChanges方法。

有关更多信息,请查看这些资源:

关于c# - DataGridView 是可编辑的,但不会使用 Entity Framework 将更改发送回数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930749/

相关文章:

c# - 如何在 C# 中的 Windows 窗体上更改 Groupbox 的边框粗细?

c# - 工具提示出现在表单/窗口后面! (C#/VS 2008)

c# - Asp.Net Core 2.1 Windows 身份验证。 HttpContext.User.Identity.Name 在 IIS 中不起作用

c# - 低效的 Linq 语句

单击时 C# XAML 列表框折叠

c# - 将 Windows Azure 项目升级到 2.2

c# - 具有重复键和值的 .NET 集合?

c# - 将二维数组旋转 45 度

.net - 将解决方案更新到.net Framework 4.7 : issue with Roslyn

winforms - c# TypeConverter 和 InstanceDescriptor 的痛苦