簡體   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