2011-01-11 6 views
1

Ich verwende eine BindingList, um eine Liste von Person-Objekten in einem DataGridView in einer Windows Forms-Anwendung anzuzeigen. Änderungen an der DataGridView ändern die zugrunde liegende BindingList. Ich habe diesen Teil funktioniert.C#: Push-Änderungen von DataGridView in BindingList zurück zur Datenbank?

Jetzt möchte ich die Liste in einer Datenbanktabelle beibehalten. Das Lesen der Liste aus der Datenbank und das Auffüllen der Personenliste ist unkompliziert, aber wenn ich eine Person aus dem DataGridView hinzufüge/bearbeite/lösche, wie und wann behalte ich diese Änderung in der Datenbank zurück?

(Zum anderen ist dieser Ansatz in Ordnung, oder bin ich etwas größere Bild fehlt? Ich will nicht, Datentabellen verwenden, da ich mit meinem Code in einer abstrahierten objektorientierte Art und Weise arbeiten möchten.)

Antwort

1

Für eine einfache Persistenz von Objekten in Windows Forms für den Anfang können Sie LINQ2SQL verwenden, tut es genau das, was Sie wollen und materialisiert auch Objekte, wenn Sie sie aus der Datenbank sammeln möchten.

Schnelle Beispiel, nachdem Sie Linq Kontext aus Datenbankschema für unterstützte Datenbanken erstellen, die SQL Server (Express) ist, alles was Sie brauchen, ist die Instanz in Ihrem Formular zu erstellen und verwenden Sie es im einzelnen atomaren Betrieb mit Daten - lesen, bearbeiten, schreiben oder abbrechen.

private YourAppContext context; 

    private void RenewContext() 
    { 
    context = new YourAppContext(); 
    } 

    private void LoadData() 
    { 
    RenewContext(); 
    DataGridView1.DataSource = context.Articles.OrderByDescending(x => x.DatePosted).Take(10); 
    } 

    private void AcceptButtonPressed() 
    { 
    context.SubmitChanges(); 
    } 

    private void CancelButtonPressed() 
    { 
    LoadData(); 
    } 

Offensichtlich können Sie Ihre Daten über BindingSource übergeben.

+0

Lustig, ich habe Linq2Sql in ASP.NET verwendet, aber die Verwendung hier völlig entkam mir. Danke, dass du das unterstrichen hast! Dies könnte die Art sein, auf die ich mich entscheide, obwohl ich immer noch neugierig bin, wie ich es ohne linq2sql machen kann. – User

+0

Dann sollten Sie wahrscheinlich INotifyPropertyChanged für Ihre Objekte selbst implementieren, die geänderten Eigenschaften verfolgen (und eine Liste neuer und gelöschter Objekte verwalten) und die Logik des Sammelns von Daten rückgängig machen, um INSERT-, UPDATE- und DELETE-Anweisungen gemäß Ihren Anweisungen aufrufen zu können Änderungen. Bei einigen dieser Aufgaben können Reflektion und Attributierung nützlich sein, sodass Sie Objekte speichern können, ohne selbst eine Abfrage zu erstellen, sondern stattdessen automatisch Abfragen generieren. Aber warum möchten Sie das Rad neu implementieren? – too

+0

Guter Punkt. Ein praktischer Grund, den ich gerade entdeckt habe, ist, dass ich glaube, dass der Linq to SQL Designer nicht von einer SQL Server Datenbank unterstützt wird, da ich Visual Studio 2010 Express verwende. – User

Verwandte Themen