繁体   English   中英

DataGridView 是可编辑的,但不会使用实体框架将更改发送回数据库

[英]DataGridView is editable but does not send changes back to database using Entity Framework

我已将我的DataGridView绑定到我的ComboBox以便无论在ComboBox选择什么值,SID 和 Mark 的相应值都将出现在DataGridView 当我这样做时, DataGridView是可编辑的,但输入时数据不会保存在数据库中。 有没有办法更新它? 如果有另一种方法,我必须首先警告我只需要DataGridView中的 SID 和 Mark,如果我尝试将整个“Student_Course”表绑定到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. 您在using语句中使用了DbContext ,这意味着dbusing语句之后被DbContext并且不会跟踪更改。

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

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

  1. 创建db作为Form一个字段,并在Form Load事件中实例化它,并将其用于加载和保存数据。
  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. 如果您需要使用与实体不同的视图模型进行编辑,则在保存更改时,您应该首先使用上下文的另一个实例从数据库加载原始实体,然后为每个实体设置已更改字段的值,然后调用SaveChanges方法。

有关更多信息,请查看以下资源:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM