Windw Presentatin Fundatin Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hchschule Harz FB Autmatisierung und Infrmatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin Inhalt Einführung WPF Layuts C# Sprache Dialg-Elemente, Menüs 2D- / 3D-Grafik, Audi, Vide, Animatin Eigene Kmpnenten Threads DataBinding und Datenbanken Rutet Events, Dependency Prperties, Cmmand Textdarstellung (Flw-FixedDcuments) FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 2 1
Data Binding Was ist DataBinding? Ansatz, um in einem Prgramm Daten in Elementen darzustellen und mit ihnen zu interagieren Daten können aus verschiedenen Datenquellen an ein Steuerelement gebunden werden: Datenbank (ADO.NET) XML-Datei CLR-Objekte UI-Elemente FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 3 Data Binding WPF-DataBindung benötigt: Zielbjekt mit Zieleigenschaften (Target bject) Quellbjekt (Surce bject) Bindingbjekt Das Zielbjekt muss DataBinding unterstützen Das Quellbjekt ist eine beliebige Datenquelle Das Bindingbjekt legt fest, wie Ziel und Quelle interagieren: One Time One Way One Way T Surce Tw Way FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 4 2
Data Binding in XAML: 1. Beispiel Slider-Wert wird zum Label übertragen Binding zeigt die Quelle Path zeigt den Wert FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 5 Data Binding in XAML: 1. Beispiel <TextBx Grid.ClumnSpan="2" Height="35" Text="{Binding ElementName=slider1,Path=Value}" HrizntalAlignment="Left" Margin="114,44,0,0" Name="textBx1" VerticalAlignment="Tp" Width="219" /> <Slider Height="23" Margin="72,122,48,0" x:name="slider1" VerticalAlignment="Tp" Grid.ClumnSpan="2" Minimum="0" Maximum="1000" TickFrequency="100" TickPlacement="Bth" Value="10" /> Text="{Binding ElementName=slider1,Path=TabIndex}" FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 6 3
Data Binding in XAML: Beispiele Slider-Wert wird zum Label übertragen Slider-Wert wird zur TextBx übertragen TextBx-Wert wird zum Slider übertragen FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 7 Data Binding in C#: 2. Beispiel Slider-Wert wird zum Label übertragen Binding zeigt die Quelle Path zeigt den Wert Definitin in C# slider1.minimum = 0; slider1.maximum=1000; slider1.value=10; slider1.tickplacement = System.Windws.Cntrls.Primitives.TickPlacement.Bth; slider1.tickfrequency = 100; Binding b = new Binding(); b.elementname = slider1.name; b.path = new PrpertyPath("Value"); textbx1.setbinding(textbx.textprperty, b); FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 8 4
Data Binding in C#: 2. Beispiel Änderungen: b.mde = BindingMde.OneTime; FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 9 Data Binding in XAML: 3. Beispiel <TextBx Text="{Binding ElementName=slider1, Path=Value,Mde=TwWay, UpdateSurceTrigger=PrpertyChanged}" /> FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 10 5
Die Change-Ntificatin-Eigenschaft Die Change-Ntificatin-Eigenschaft srgt dafür, dass sich Änderungen auf der UI zum Objekt durchschlagen Arten der Change Ntificatin: PrpertyChanged: Quell-Daten werden geändert, wenn sich Daten im Ziel-Objekt ändern, z. B. Check- der Radibuttns LstFcus: Quell-Daten werden aktualisiert, wenn das Ziel- Objekt seinen Fkus verliert, z. B. Eingabe-Cntrls wie Textbxen Explicit: Quell-Daten werden nur dann aktualisiert, wenn das Ziel eine Aktualisierung explizit zulässt, z. B. nach der Eingabevalidierung Kann nur mit den Interaktinsmdus TwWay und OneWayTSurce verwendet werden FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 11 Datenbanken Mögliche Varianten ODBC Prviders (Excel, Access, Textdatei, AS 400, DB2) OLE DB Data Prviders (Excel, Access, Textdatei, AS 400, DB2) OLE DB Data Link (Data Link File UDL) Net-Prvider ADO.net LINQ (Language Integrated Query) Windws Frms vs. Windws Presentatin Fundatin Datenbank-Unterstützung Access MS SQL Server (Express Editin bis 2GB) MySQL Firebird (Server und Embed Versin) Oracle (Micrsft, Oracle, Crelab) Pstgre (Crelab) Sybase VistaDB FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 12 6
Datenbanken Mögliche GUI-Varianten DataGridView Einbau der FK in das Grid (CmbBx) Master / Details (DetailsView, nur ein Datensatz) Gruppenwechsel mit Editzeile, CmbBx, Checkbx, ListView etc. Weitere Eigenschaften Aufruf eines Filters VirtualMde für sehr grße Datenmengen Auslesen der Tabellen in der Datenbank Auslesen der Attribute mit Datentypen pr Tabelle Auslesen der Fremdschlüssel etc. pr Tabelle FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 13 Datenbanken mit.net Prvider erstellen Struktur Der.net Prvider für Firebird und andere DBS kapselt alle Zugriffe auf die Datenbank Vllständig in C# geschrieben Funktinen: - Cnnectin - GetSchema - Open - Clse - BeginTransactin - ChangeDatabase - CreateCmmand - Dispse - State (Status: Open Clse) - FbCnnectin.CreateDatabase - FbCnnectin.DrpDatabase - FbCnnectin.ClearAllPls - FbCnnectin.ClearPl FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 14 7
Datenbanken erstellen mit Firebird Vraussetzungen Ablauf Firebird Server installiert Firebird Client-Installatin Firebird Embed-Versin, einfache DLL.net Prvider für Firebird ab Visual Studi 2005 Erstellen eines Prjektes Einbinden des Prviders Erstellen einer DBS-Klasse (Kapselung) Erstellen einer Query-Klasse (Kapselung) Aufbau der GUI (DataGridView) Erstellen einer Verbindung (cnnectin) SQL-Befehl hlen Query-Abfrage starten DataTable dem Grid zuweisen FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 15 Vergleich Firebird und.net Datentypen Firebird type.net type FbDataReader Example Methde BIGINT System.Int64 GetInt64() BIGINT Reading Example (C#) BLOB System.Byte[] GetBytes() BLOB Reading Example (C#) BLOB SUB_TYPE 1 System.String GetString() BLOB SUB_TYPE 1 Reading Example (C#) CHAR System.String GetString() CHAR Reading Example (C#) DATE System.DateTime GetDateTime() DATE Reading Example (C#) DECIMAL System.Decimal GetDecimal() DECIMAL Reading Example (C#) DOUBLE PRECISION System.Duble GetDuble() DOUBLE PRECISION Reading Example (C#) FLOAT System.Flat GetFlat() FLOAT Reading Example (C#) INTEGER System.Int32 GetInt32() INTEGER Reading Example (C#) NUMERIC System.Decimal GetDecimal() NUMERIC Reading Example (C#) SMALLINT System.Int16 GetInt16() SMALLINT Reading Example (C#) TIME System.DateTime GetDateTime() TIME Reading Example (C#) TIMESTAMP System.DateTime GetDateTime() TIMESTAMP Reading Example (C#) VARCHAR System.String GetString() VARCHAR Reading Example (C#) FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 16 8
DataGridView DataTable 1 Tabelle Navigatr Binding Cnnectin DBS CheckBx Textfield DataSet n Tabelle FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 17 FbCnnectin cnn = new FbCnnectin(sArg); public DataTable getdbsdata(string ssql) { //FbCmmand cmmand = new FbCmmand(sSQL, _cnn); FbDataAdapter da = new FbDataAdapter(sSQL, _cnn); DataTable dt = new DataTable("RELATIONS"); da.fill(dt); // füllt die DataTable mit Daten return dt; } // hier kann man mehrere Tabellen erhalten, für WPF public DataSet getdbsdataset(string ssql, string stable) { //FbCmmand cmmand = new FbCmmand(sSQL, _cnn); FbDataAdapter da = new FbDataAdapter(sSQL, _cnn); DataSet ds = new DataSet(); da.fill(ds, stable); // z. B. "Emplyee", wichtig da es mehrere gibt return ds; } FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 18 9
Abfrage einer SQL-Anweisung: Direkte Zuweisung zum Grid string sfilename = "EMPLOYEE.FDB"; string ssql1 = "select * frm EMPLOYEE"; _dbs.setdbs(sfilename); DataSet ds = dbs.getdbsdataset(ssql, "EMPLOYEE"); datagrid1.datacntext = ds; FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 19 1. Datenbankbeispiel: DataBase1 FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 20 10
1. Datenbankbeispiel: DataBase1 1. Register Einfaches DataGrid Editr für SQL-Befehle Schalter zum Ausführen Autmatisches DataBinding 2. Register Einfaches DataGrid manuelles DataBinding, feste Abfrage 3. Register Einfaches DataGrid DataGridCmbBxClumn für die Fachbereiche 4. Register Einfaches DataGrid Master-Detail FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 21 1. Datenbankbeispiel: DataBase1 Ablauf (1) Datenbankdesigner Erstellen des lgischen ER-Mdell Erstellen der DDL-Befehle Erstellen der Datenbank Aufrufen vn FBCnsle Erstellen einer neuen Datenbank Einfügen der DDL-Befehle (create Table) Einfügen der DML-Befehle (insert int) FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 22 11
1. Datenbankbeispiel: DatenbankDesigner FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 23 Tabelle Student FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 24 12
Tabelle FB FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 25 Tabellen: TABLE FB int PINDEX char(5) KURZNAME varchar(50) LANGNAME TABLE STUDENT int MATRNR varchar(50) NACHNAME varchar(50) VORNAME MATRNR muss größer 0 sein Beziehung Student mit FB FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 26 13
Ablauf (2): FBCnsle Erstellen der Datenbank; Aufrufen vn FBCnsle Erstellen einer neuen Datenbank Einfügen der DDL-Befehle (create Table) Einfügen der DML-Befehle (insert int) Datei WPF-DML.txt FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 27 Prjekt DataBase1 Ablauf (3) Erstellen des Prjektes: Hmepage, Laden der ZIP-Datei Verändern des Prjektes: Einfügen der Klasse DBS, siehe Hmepage Einfügen eines Verweises zum Firebird-Prvider FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 28 14
Laden des Verweises auf den Prvider, schn im Prjekt Ablauf: Prjekt-Explrer Verweise Rechte Maustaste Verweis hinzufügen Register Durchsuchen Wechseln ins Debug- Verzeichnis Auswahl der Fireb.dll FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 29 Prjekt DataBase1 Ablauf (4) Erstellen des Prjektes: Hmepage, Laden der ZIP-Datei Verändern des Prjektes: Einfügen einer glbalen Variable dbs In lad: Feste Zuweisung zur Studenten-Datenbank STUDENT- WPF.FDB grid1.itemssurce = dt1.defaultview; grid1.autgenerateclumns = true; grid1.isreadonly = true; grid1.canuseraddrws = false; grid1.canuserdeleterws = false; grid1.canuserresizeclumns = true; grid1.canusersrtclumns = true; FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 30 15
Prjekt DataBase1 Ablauf (5) bngrid1_sql1_click: String sql = "Select * frm FB"; grid1.itemssurce = dt1.defaultview; bngrid1_sql2_click: String sql = "Select * frm Student"; grid1.itemssurce = dt1.defaultview; bngrid1_sql3_click: String sql = "select * frm student rder by Nachname"; grid1.itemssurce = dt1.defaultview; bnsql_click: Auslesen des Editrs Ausführen des SQL-Befehls Ausgabe in grid1 FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 31 Prjekt DataBase1 Ablauf (6) Manuelles Definieren der Felder im zweiten DataGrid grid2 Jeweils eine DataGrid.Clumns Feld: MATRNR Width="100" Header="Matrnr Feld NACHNAME Width="100" Header="Nachname" Feld VORNAME Width="100" Header="Vrname" Feld FINDEX Width="100" Header="Findex" Binding="{Binding FINDEX}" FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 32 16
Prjekt DataBase1 Ablauf (7) bngrid2_sql1_click: String sql = "Select * frm Student"; grid1.itemssurce = dt1.defaultview; FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 33 Prjekt DataBase1: 4. Register FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 34 17
Prjekt DataBase1 Ablauf (8) Viertes DataGrid grid4a und grid4b Master/Details grid4a Autmatisches Anzeigen der Felder à la grid1 Es darf nur ein Eintrag ausgewählt werden Event grid4a_selectinchanged erzeugen grid4b Abfragen des SelectedIndex vn grid4a Wenn >=0 dann Abfrage des SelectedItems vn grid4a KARSTEN int pindex = (int) 42; String sql = "Select * frm Student where FINDEX=" + pindex; Abfrage und Eintragen FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 35 Prjekt DataBase1 Ablauf (9) Schalter Insert Student Eintragen eines neuen Studenten Matrikelnummer: 88888 Nachname: Garret Vrname: David FB Wirtschaftswissenschaften FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 36 18
Datenbank-CmbBx: 3. Register FB Autmatisierung und Infrmatik: Windws Presentatin Fundatin 37 19