Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 24 Datenbindung
Pfeil 24.1 Bindung benutzerdefinierter Objekte
Pfeil 24.1.1 Ein Objekt mit XAML-Code erzeugen und binden
Pfeil 24.1.2 Ein Objekt mit C#-Code erzeugen und binden
Pfeil 24.1.3 Aktualisieren benutzerdefinierter Objekte
Pfeil 24.2 Auflistungen binden
Pfeil 24.2.1 Allgemeine Gesichtspunkte
Pfeil 24.2.2 Anbindung an eine »ListBox«
Pfeil 24.2.3 Änderungen der Collection an die bindenden Elemente weiterleiten
Pfeil 24.3 Validieren von Bindungen
Pfeil 24.3.1 Die Validierung im Datenobjekt
Pfeil 24.3.2 Eine benutzerdefinierte »ValidationRule«
Pfeil 24.3.3 Validierung mit der Schnittstelle »IDataErrorInfo«
Pfeil 24.3.4 Fehlerhinweise individuell anzeigen
Pfeil 24.3.5 Ereignisauslösung bei einem Validierungsfehler
Pfeil 24.4 Daten konvertieren
Pfeil 24.4.1 Mehrfachbindungen und Konverterklassen
Pfeil 24.5 Datenbindung an ADO.NET- und LINQ-Datenquellen
Pfeil 24.5.1 Das Binden an ADO.NET-Objekte
Pfeil 24.5.2 Das Binden an LINQ-Ausdrücke

Galileo Computing - Zum Seitenanfang

24.5 Datenbindung an ADO.NET- und LINQ-DatenquellenZur nächsten Überschrift

In den bisherigen Beispielen wurden immer benutzerdefinierte CLR-Objekte als Datenquelle verwendet, manchmal nur als einzelne Objekte, in anderen Beispielen in Form von Auflistungen. In den meisten Fällen werden aber Daten aus einer Datenbank bezogen und in einem Fenster zur Anzeige gebracht. Mit ADO.NET und dem Entity Framework gibt es unter .NET zwei herausragende Technologien, die den Zugriff auf Datenbanken unterstützen. In diesem Abschnitt wollen wir uns ansehen, wie wir Daten aus diesen beiden Quellen in der WPF nutzen können.

Die Themen ADO.NET und Entity Framework werden erst nach dem Themenkomplex der WPF behandelt. Auch wenn Sie möglicherweise noch keine Kenntnisse in den beiden Technologien haben, sollten wir das Thema der Bindung der WPF-Elemente an diese Datenquellen nicht verschieben. Hier kommt es auch weniger auf die Details an, wie die Daten bereitgestellt werden, sondern vielmehr darauf, wie das Resultat der Datenabfrage in der WPF verarbeitet wird. Sollten Sie aber dennoch wissen wollen, was sich hinter einem bestimmten Typ und einer bestimmten Syntax verbirgt, sollten Sie das entsprechende Kapitel vorab lesen.

Ein weiterer Hinweis sei an dieser Stelle gestattet. In diesem Buch wird, wenn wir die Themenkreise ADO.NET und das Entity Framework erörtern, mit der altbekannten, fast schon als klassisch zu bezeichnenden Datenbank Northwind gearbeitet. In Kapitel 31 ist beschrieben, wie Sie diese Datenbank beziehen und in SQL Server 2008 Express Edition einbinden können.


Galileo Computing - Zum Seitenanfang

24.5.1 Das Binden an ADO.NET-ObjekteZur nächsten ÜberschriftZur vorigen Überschrift

In den letzten Abschnitten haben wir mit benutzerdefinierten Klassen gearbeitet, die uns als Datenquelle dienten. Im Grunde genommen ändert sich zunächst einmal nichts, wenn Sie die spezifischen ADO.NET-spezifischen Objekte DataSet bzw. DataTable an WPF-Elemente binden wollen.

Im folgenden Listing wird die Tabelle Products der Northwind-Datenbank abgefragt und an den Datenkontext des Window übergeben:

public MainWindow()
{
InitializeComponent();
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;"
+ "DataBase=Northwind;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SELECT * FROM Products", con);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
this.DataContext = ds.Tables[0];
}

Listing 24.37 Das Binden einer ADO.NET-Tabelle an einen Datenkontext

Die durch ds.Tables[0] beschriebene Tabelle wird genauso dem DataContext übergeben, als sei es eine ganz normale Collection.

Es gibt allerdings einen Unterschied, den Sie beachten müssen, wenn Sie eine DataTable an die Eigenschaft ItemsSource eines Listensteuerelements binden wollen. Die Eigenschaft ItemsSource verlangt nämlich, dass die anzubindende Datenquelle die Schnittstelle IEnumerable unterstützt. Genau das ist bei einem DataTable-Objekt nicht der Fall. In solchen Fällen bietet sich die Lösung an, auf die DataTable deren Methode DefaultView aufzurufen, wie im nächsten Listing gezeigt wird.

[...]
DataTable tbl = ds.Tables[0];
dataGrid1.ItemsSource = tbl.DefaultView;

Listing 24.38 Binden einer DataTable an die Eigenschaft »ItemsSource«

Hier sei dataGrid1 der Bezeichner eines WPF-DataGrid-Elements.

Die Methode DefaultView liefert ein Objekt vom Typ DataView zurück, das die erforderliche Schnittstelle IEnumerable implementiert. Dabei handelt es sich um eine Sicht (View) auf die Tabelle, mit der die Tabelle auch gefiltert, sortiert und durchsucht werden kann.


Galileo Computing - Zum Seitenanfang

24.5.2 Das Binden an LINQ-AusdrückeZur vorigen Überschrift

Eine zweite wichtige Datenquelle wird durch LINQ-Ausdrücke beschrieben. LINQ-Ausdrücke werden unter anderem auch vom Entity Framework zur Abfrage von Daten benutzt. LINQ-Ausdrücke liefern als Resultat einer Abfrage ein Ergebnis, das durch das Interface IEnumerable<T> beschrieben wird. Wenige Zeilen vorher haben Sie erfahren, dass zur Bindung einer Datenquelle an die Eigenschaft ItemsSource die Datenquelle die Schnittstelle IEnumerable implementieren muss. ItemsSource und das Ergebnis einer LINQ-Abfrage passen also prima zusammen, da IEnumerable<T> natürlich IEnumerable implementiert. Somit müssen wir nicht im Geringsten in eine Trickkiste greifen, sondern können das Resultat einer LINQ-Abfrage direkt an die ItemsSource-Eigenschaft binden.

Das folgende Listing werden Sie später im Buch noch einmal wiederfinden, wenn ich Ihnen die Grundzüge des Entity Frameworks erläutere. Es wird auch hier die Products-Tabelle der Northwind-Datenbank abgefragt, wobei in die Ergebnismenge nur die Datensätze geschrieben werden, deren Einzelpreis größer oder gleich 50 ist.

NorthwindEntities context = new NorthwindEntities();
var products = from p in context.Products
where p.UnitPrice >= 50
select new { p.ProductID, p.ProductName, p.UnitPrice};
dataGrid1.ItemsSource = products;

Listing 24.39 Anbindung einer LINQ-Datenquelle

Wo Licht ist, ist auch Schatten. So auch in diesem Fall. Im Gegensatz zu ObservableCollection und DataTable wird vom IEnumerable<T>-Interface das Hinzufügen und Löschen von Listenmitgliedern nicht unterstützt. Doch LINQ bietet mit den beiden Methoden ToList und ToArray einfach umzusetzende Lösungen.

Während ToArray ein Array vom Typ T (also ein Array generischer Typen) zurückliefert, ist es bei der Methode ToList der Typ List<T>. Damit liegen in beiden Fällen Auflistungen vor, die sich in ihrer Verhaltensweise nicht von den anderen Auflistungen unterscheiden und – um es wieder auf den Punkt zu bringen – auch das Hinzufügen und Löschen von Listenelementen ermöglichen.

Betrachten wir den LINQ-Ausdruck aus Listing 24.39. Mit dem Aufruf der Methode ToList wandeln wir das IEnumerable<T>-Resultat nun noch in List<T> um:

var products = from p in context.Products
where p.UnitPrice >= 50
select new { p.ProductID, p.ProductName, p.UnitPrice};
List<Product> liste = products.ToList();

Listing 24.40 LINQ-Abfrageresultat in den Typ »List<T>« umwandeln



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2012

Visual C# 2012
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de