Datentabellen und eine Verbindliche Quelle
Ich versuche zu verstehen, den Unterschied zwischen den folgenden 2 Beispiele.
Erste, das ist, wie ich momentan zuweisen von Daten an ein Steuerelement in meinem WinForm-App.
lkuCounty.Properties.DataSource = Person.CountyList();
lkuCounty.Properties.PopulateColumns();
lkuCounty.Properties.DisplayMember = "CountyName";
lkuCounty.Properties.ValueMember = "CountyID";
lkuCounty.Properties.Columns[0].Visible = false;
lkuCounty.Properties.Columns[2].Visible = false;
lkuCounty.Properties.Columns[3].Visible = false;
Diese scheint zu funktionieren aber ich gebe zu, dass wenn es etwas off ich wahrscheinlich fehlt die Erfahrung zu sagen, einfach durch einen Blick auf den code. Auch der Hinweis, Person.CountyList()
tatsächlich gibt eine DataTable
:\
Nun, wie alle Beispiele, die ich zu finden scheinen, zu sagen, ich sollte dies tun.
memberBindingSource.DataSource = Person.CountyList();
lkuCounty.Properties.DataSource = memberBindingSource;
lkuCounty.Properties.PopulateColumns();
lkuCounty.Properties.DisplayMember = "CountyName";
lkuCounty.Properties.ValueMember = "CountyID";
lkuCounty.Properties.Columns[0].Visible = false;
lkuCounty.Properties.Columns[2].Visible = false;
lkuCounty.Properties.Columns[3].Visible = false;
Ist es ein Vorteil der Verwendung der BindingSource? Ist es negativ, es zu tun die ANDERE WEISE?
Kontext, dies ist eine WinForm-CRUD-app in C# mit SQL 2005.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für standard DataSets/DataTables, die BindingSource stellt bloß eine weitere Schicht der Dereferenzierung zwischen Ihrer Steuerung und der eigentlichen Datenquelle.
Jedoch werden die meisten Daten-aware Steuerelemente können nur gebunden werden, um bestimmte Daten-Quellen (die IList implementieren, IListSource, IBindingList-oder IBindingListView). Dies stellt ein problem, wenn Sie benötigen, um ein benutzerdefiniertes Objekt als Datenquelle, da sagte Objekt dann umsetzen muss mindestens eine dieser Schnittstellen.
So können Sie entweder implementieren Sie die gesamte IList-Schnittstelle in Ihre business-Objekt - oder Sie Erben können Ihr Objekt aus der Liste Klasse und binden Sie es bis zu einem BindingSource, die Sie dann eine Bindung zu Ihrem Control(s).
Den langen und kurzen: es sei denn, Sie sind sicher, Ihre Datenquellen werden immer DataTables und dergleichen, verwenden Sie eine BindingSource. Es fügt eine leichte performance-overhead, aber es kann Ihr Leben viel einfacher.
Gibt es auch einige sehr schöne Zustand-management-Funktionen in der BindingSource, die in sehr handliches kommt, wenn Ihre Anwendung ist stateful. Statt schreiben Sie benutzerdefinierte Status-handling-code, lassen Sie den BindingSource Griff Dinge für Sie!
Können Sie binden direkt an ein beliebiges Objekt, wie im ersten Beispiel. Jedoch, das Objekt implementieren müssen viele Daten verbindlicher Schnittstellen für die es zu reagieren intelligent auf die events werden ausgelöst durch die Kontrolle.
Zum Beispiel, binden Sie eine Liste von Personen an ein DataGridView. Jetzt, klicken Sie auf eine Spaltenüberschrift, um eine Spalte zu Sortieren. Es funktioniert nicht, da List nicht implementiert die Schnittstelle benötigt. Versuchen Sie, die gleiche Sache mit einer DataTable. Die Spalte Sortieren magisch arbeitet. Das ist, weil die DataTable implementiert, die alle benötigten Schnittstellen für Daten Verbindlich.
Schreiben Sie Ihre eigenen Klassen, implementieren von data binding-Schnittstellen. Es ist eine Menge Arbeit. Hier ist ein tolles Buch zum Thema:
Datenbindung mit Windows Forms 2.0: Programmierung von Smart Client-Data-Anwendungen mit .NET