我已将我的 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; }
}
最佳答案
上面的代码有一些重要的问题:
您将查询结果调整为自定义
Class1
,这不是您的实体类型。您使用了
DbContext
在using
语句中,这意味着db
在 using 语句之后处理,不会跟踪更改。您在您的
DbContext
的另一个实例上调用了SaveChanges
,它不知道更改,所以没有任何反应。
要解决上述问题,请考虑以下提示:
- 创建
db
作为Form
的字段,并在Form
的Load
事件中实例化,并用于加载和保存数据。 您可以这样加载数据实体:
db = new Entities2(); db.Student_Course.Where(x => c.CID== CID).ToList(); editDataGridView.DataSource = db.Student_Course.Local;
您可以这样保存数据:
editDataGridView.EndEdit(); db.SaveChanges();
如果您需要使用与您的实体不同的 View 模型进行编辑,在保存更改时,您应该首先使用上下文的另一个实例从数据库加载原始实体,然后为每个实体设置更改字段的值和然后调用
SaveChanges
方法。
有关更多信息,请查看这些资源:
关于c# - DataGridView 是可编辑的,但不会使用 Entity Framework 将更改发送回数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930749/