2016-08-13 1 views
2

ich meine DataGridView meiner ComboBox gebunden haben, so dass alles, was Wert im ComboBox ausgewählt wird, wird der entsprechende Wert für SID und Mark in der DataGridView erscheinen. Die DataGridView ist editierbar, wenn ich dies tue, aber die Daten werden nicht in der Datenbank gespeichert, wenn sie eingegeben werden. Gibt es eine Möglichkeit, es zu aktualisieren? Wenn es eine andere Methode gibt, muss ich zuerst warnen, dass ich nur SID und Mark in der DataGridView benötige, wenn ich versuche, die ganze "Student_Course" -Tabelle an die DataGridView zu binden, bekomme ich andere Spalten, die ich nicht benötige.Datagridview ist editierbar aber nicht Änderungen nicht zu Datenbank mit Entity Framework zurückschicken

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; } 

} 
+0

ich ursprünglich die erste Frage beantwortet, weil ich dich nicht kennen wollte zurück in die DB speichern. Beachten Sie, dass nach dem Kopieren der Daten in die Liste, aus der die DataSource besteht, keine Verbindung mehr zur Datenbank besteht. Sie können entweder eine neue Verbindung mit einem DataAdapter, DataTable usw. erstellen oder einfach an die vollständige Tabelle binden. Es gibt kein Problem __hiding__ alle __unerwünschten Spalten__ aus einer DataGridView. – TaW

+0

Etwas wie das, was ich bearbeitet habe? Es ist auf der Unterseite – Anon

+0

Nun, das versteckt einige Spalten.Da ich EF nicht verwende, kann ich nichts sagen, wenn etwas fehlt, wenn ich in die Datenbank schreibe. – TaW

Antwort

5

Es gibt einige wichtige Fragen im obigen Code:

  1. Sie prägten das Ergebnis der Abfrage zu einem benutzerdefinierten Class1, die nicht Ihre Entitätstyp ist.

  2. Sie haben eine DbContext in using Anweisung verwendet, was bedeutet, dass db nach der using-Anweisung angeordnet ist und Änderungen nicht verfolgen.

  3. Sie haben SaveChanges auf einer anderen Instanz Ihrer DbContext aufgerufen, die Änderungen nicht bemerkt, so nichts passiert.

Um oben genannten Probleme betrachten Sie diese Tipps zu lösen:

  1. db als ein Feld von Form erstellen und es in Load Falle Form instanziiert und es sowohl für das Laden und Speichern von Daten verwenden.
  2. Sie können auf diese Weise laden Dateneinheit:

    db = new Entities2(); 
    db.Student_Course.Where(x => c.CID== CID).ToList(); 
    editDataGridView.DataSource = db.Student_Course.Local; 
    
  3. Sie Daten auf diese Weise speichern:

    editDataGridView.EndEdit(); 
    db.SaveChanges(); 
    
  4. Wenn Sie bearbeiten Ihre Einheit anders als für ein Ansichtsmodell verwenden müssen, Wenn Sie Änderungen speichern, sollten Sie zuerst die ursprünglichen Entitäten aus der Datenbank laden, indem Sie eine andere Instanz Ihres Kontexts verwenden, dann für jede Entität den Wert des geänderten Felds festlegen und dann die Methode SaveChanges aufrufen.

Weitere Informationen einen Blick auf diese Ressourcen nehmen:

+0

Ist etwas, was ich der Frage hinzugefügt habe, besser als das, was ich vorher getan habe? Oder ist das im Grunde dasselbe? – Anon

+0

Es ist völlig besser, aber speichern Änderungen sollten in einer anderen Methode aufgerufen werden. –

+0

Yup. Ich habe die Änderungen einfach in eine Schaltfläche übernommen. Jetzt funktioniert es :) Vielen Dank !! – Anon

Verwandte Themen