Upload
others
View
2
Download
1
Embed Size (px)
Citation preview
http://www.mut.de/main/main.asp?page=deutsch/bookdetails&ProductId=118151http://www.pearsoned.de
7
Inha
lt
Inhalt
Widmung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Über den Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Teil 1 C# 2.0 – Grundlagen 33
Kapitel 1 Einführung in C# 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.1 Was ist das .NET Framework? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Die Entwicklung von .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Die Common Language Runtime (CLR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Das Common Type System (CTS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Frühjahrsputz: Programmierung in einer Umgebung mit Garbage Collection. . . . . . . 38
1.2 Variablen in C# 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38NET-Standardtypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Typkürzel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Wert- und Referenztypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.3 Die grundlegende Syntax von C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Codeblöcke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Das obligatorische »Hello World«-Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.4 Was mit C# möglich ist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Kapitel 2 Ausdrücke und Steuerstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.1 Verzweigungen und bedingte Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Einführung in boolesche Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Grundlegende bedingte Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Fortgeschrittene bedingte Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Inhalt
8
2.2 Schleifen und Wiederholungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49Die for-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49Die while-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Die do-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Kapitel 3 Strings und reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Einführung in .NET-Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Strings formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Strings bearbeiten und vergleichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Einführung in die StringBuilder-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.2 Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Eingaben validieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Daten aus Eingaben extrahieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Kapitel 4 Arrays und Auflistungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.1 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Arrays deklarieren und initialisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Eindimensionale Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Mehrdimensionale Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Arrays aus Arrays (Jagged Arrays) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.2 Auflistungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Arrays und Auflistungen im Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
ArrayList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Hashtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
SortedList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Kapitel 5 Objektorientierte Programmierung mit C# . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.1 Objektorientiertes Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Einführung in objektorientiertes Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Klassen entwerfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Schnittstellen entwerfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Inha
lt
9
5.2 Objektorientierte Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Einfache Klassen erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Sichtbarkeit der Member . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Einführung in Polymorphismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Schnittstellen implementieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Kapitel 6 Einführung in Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.1 Überblick über Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95Vorteile von Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Einführung in Typparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Einschränkungen in Typparametern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.2 Generische Typen erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Generische Klassen erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Generische Methoden erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Generische Schnittstellen erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.3 Generische Auflistungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Die Klasse Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Die Klasse List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Die Klasse Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Die Klasse Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Teil 2 Grundlagen des .NET Framework 2.0 107
Kapitel 7 Eingabe/Ausgabe und Persistenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
7.1 Einführung in Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Speicherstreams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
7.2 Einführung in die grundlegende Datei-Ein- und -Ausgabe . . . . . . . . . . . . . . 113Dateien erstellen und erweitern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Dateien lesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Verzeichnisse und das Dateisystem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.3 Asynchrone Datei-Ein- und -Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
7.4 Isolierte Speicherung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
7.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Inhalt
10
Kapitel 8 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
8.1 XML-Dokumente lesen und schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
8.2 XML-Daten mit XPath abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
8.3 XML-Dokumente mit XSLT umwandeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.4 XML-Dokumente mit XSD validieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Kapitel 9 Ereignisse und Delegates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
9.1 Einführung in Delegates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Ko- und Kontravarianz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
9.2 Anonyme Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
9.3 Multicast-Delegates erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
9.4 Einführung in Ereignisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
9.5 Erweiterte ereignisgesteuerte Programmierung . . . . . . . . . . . . . . . . . . . . . . 145
9.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Kapitel 10 Multithread-Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10.1 Die Grundlagen der threadgestützten Programmierung . . . . . . . . . . . . . . . . . 151
10.2 Eine erste Multithread-Anwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Threads erstellen und ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Threads beenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Threads anhalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Threads pausieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Threads verknüpfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
10.3 Thread-Synchronisierung und -Konkurrenz . . . . . . . . . . . . . . . . . . . . . . . . . 159Das Schlüsselwort lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Mutexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Monitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Die Klasse Interlocked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Die Klasse ReaderWriterLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Manuell und automatisch zurückgesetzte Ereignisse. . . . . . . . . . . . . . . . . . . . . . 166
10.4 Die Klasse ThreadPool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
10.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Inha
lt
11
Kapitel 11 Reflection-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
11.1 Einführung in die Reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
11.2 Methodeninformationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
11.3 Memberinformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
11.4 Ereignisse untersuchen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
11.5 Benutzerdefinierte Codeattribute erstellen und auswerten . . . . . . . . . . . . . . 180
11.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Kapitel 12 Assemblys und Anwendungsdomänen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
12.1 Einführung in Assemblys. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
12.2 Hinter den Kulissen von Assemblys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184Einführung in das Assemblymanifest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
12.3 Assemblys erstellen und verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
12.4 Assembly-Ressourcen speichern und abrufen . . . . . . . . . . . . . . . . . . . . . . . . 188
12.5 Lokalisierung und Satelliten-Assemblys. . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
12.6 Einführung in Anwendungsdomänen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
12.7 Programmierung mit Anwendungsdomänen . . . . . . . . . . . . . . . . . . . . . . . . 194
12.8 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Kapitel 13 COM- und Windows-Interoperabilität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
13.1 Einführung in die Interoperabilität bei C#. . . . . . . . . . . . . . . . . . . . . . . . . . 197
13.2 COM-Objekte im .NET Framework verwenden . . . . . . . . . . . . . . . . . . . . . . . . 198Primäre Interoperabilitäts-Assemblys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
13.3 .NET-Klassen in COM verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
13.4 Zugriff auf Code in nicht verwalteten DLLs . . . . . . . . . . . . . . . . . . . . . . . . . . 204
13.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Kapitel 14 Codezugriffssicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
14.1 Einführung in die Codezugriffssicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
14.2 Sicherheitsrichtlinien verwenden und verwalten . . . . . . . . . . . . . . . . . . . . . 210Verwaltung der Codezugriffssicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
14.3 Imperative Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Identitäten imperativ erzwingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
14.4 Deklarative Sicherheit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
14.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Inhalt
12
Kapitel 15 Kryptografie und Datenschutz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
15.1 Einführung in die Kryptografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
15.2 Verschlüsselung mit geheimen (privaten) Schlüsseln . . . . . . . . . . . . . . . . . . . 224
15.3 Verschlüsselung mit öffentlichen Schlüsseln. . . . . . . . . . . . . . . . . . . . . . . . . 224
15.4 Hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
15.5 Digitale Signaturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
15.6 Verschlüsselung mit geheimen (privaten) Schlüsseln . . . . . . . . . . . . . . . . . . . 227
15.7 Verschlüsselung mit öffentlichen Schlüsseln. . . . . . . . . . . . . . . . . . . . . . . . . 228
15.8 Hashes und digitale Signaturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
15.9 Verwenden der Datenschutz-API (DPAPI) . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
15.10 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Kapitel 16 .NET 2.0-Code optimieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
16.1 Boxing und Unboxing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
16.2 Die richtigen Techniken zur Stringbearbeitung . . . . . . . . . . . . . . . . . . . . . . . 239
16.3 Effiziente Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
16.4 Den Anwendungsstart beschleunigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
16.5 Codeprofile mit dem Leistungs-Assistenten erstellen . . . . . . . . . . . . . . . . . . . 242
16.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Teil 3 Datenzugriff mit .NET 2.0 249
Kapitel 17 Grundlagen von ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
17.1 Einführung in ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
17.2 Eine Verbindung einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Einen Verbindungsstring aufbauen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Die DbConnection-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
17.3 Kommunikation mit der Datenquelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Befehle ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256DataReader verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259Schema Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
17.4 Mit Daten arbeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Einführung in DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263DataAdapter verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
17.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Inha
lt
13
Kapitel 18 Erweiterte ADO.NET-Techniken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
18.1 Die neue, verbesserte DataTable-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269Eine DataTable mit XML laden und speichern . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Die neue Klasse DataTableReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
18.2 Asynchroner Datenzugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
18.3 Stapelaktualisierung von Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
18.4 Der neue Namensraum System.Transactions . . . . . . . . . . . . . . . . . . . . . . . . . 276Explizite Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Implizite Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Kapitel 19 ADO.NET-Datenprovider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
19.1 Einführung in ADO.NET-Datenprovider . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
19.2 Providerfactories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Die Liste der installierten Providerfactories abrufen . . . . . . . . . . . . . . . . . . . . . . 284
Eine Verbindung mithilfe einer Providerfactory einrichten . . . . . . . . . . . . . . . . . . 285
19.3 Verbindungsstrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
19.4 Datenquellen aufzählen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
19.5 Zusätzliche Providerinformationen abrufen . . . . . . . . . . . . . . . . . . . . . . . . . 289Die Methode RetrieveStatistics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Schemainformationen von Datenprovidern abrufen . . . . . . . . . . . . . . . . . . . . . . 291
19.6 Einen benutzerdefinierten ADO.NET-Datenprovider erstellen . . . . . . . . . . . . . 292
19.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Kapitel 20 Stark typisierte DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
20.1 Einführung in typisierte DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Typisierte DataSets mit einem XSD-Schema erstellen . . . . . . . . . . . . . . . . . . . . . . 296
Typisierte DataSets mit dem Designer erstellen . . . . . . . . . . . . . . . . . . . . . . . . . 297
Programmierung mit typisierten DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
20.2 Typisierte Daten mit aktuellen Daten verbinden . . . . . . . . . . . . . . . . . . . . . . 299DataSets mit einem DataAdapter manuell füllen . . . . . . . . . . . . . . . . . . . . . . . . 300
Typisierte DataSets mit TableAdapter-Objekten füllen . . . . . . . . . . . . . . . . . . . . . 300
Typisierten DataSets zusätzliche Abfragen hinzufügen. . . . . . . . . . . . . . . . . . . . . 304
Ein typisiertes DataSet mit Anmerkungen versehen . . . . . . . . . . . . . . . . . . . . . . 305
Typisierte DataSets mit partiellen Klassen erweitern . . . . . . . . . . . . . . . . . . . . . . 308
20.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Inhalt
14
Kapitel 21 Programmierung mit dem SQL Server 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . 311
21.1 Einführung in den SQL Server 2005 als CLR-Host . . . . . . . . . . . . . . . . . . . . . . 311
21.2 Gespeicherte C#-Prozeduren erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
21.3 Benutzerdefinierte C#-Funktionen erstellen . . . . . . . . . . . . . . . . . . . . . . . . 315
21.4 Benutzerdefinierte C#-Typen erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
21.5 Die neue serverseitige SQL-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
21.6 MARS (Multiple Active RecordSets). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
21.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Teil 4 ASP.NET 2.0 – Webanwendungen entwickeln 329
Kapitel 22 Einführung in ASP.NET 2.0 und Web-Formulare . . . . . . . . . . . . . . . . . . . . . . 331
22.1 Einführung in ASP.NET 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Seiten- und Steuerungshierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Einführung in den ASP.NET 2.0-Compiler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Statusverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Das Web-Konfigurationssystem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
22.2 Der Lebenszyklus von ASP.NET-Seiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334Die Phasen der Darstellung von ASP.NET-Seiten. . . . . . . . . . . . . . . . . . . . . . . . . 335Ereignisse im Lebenszyklus von ASP.NET-Seiten . . . . . . . . . . . . . . . . . . . . . . . . . 336
22.3 Überblick über die Steuerelemente in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . 340
22.4 ASP.NET-Anwendungen erstellen und debuggen. . . . . . . . . . . . . . . . . . . . . . 344ASP.NET-Anwendungen erstellen und entwickeln . . . . . . . . . . . . . . . . . . . . . . . 344ASP.NET-Anwendungen debuggen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
22.5 Ereignisse und Postbacks handhaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
22.6 Interaktive dynamische Seiten mit Clientcallbacks. . . . . . . . . . . . . . . . . . . . . 348
22.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Kapitel 23 Statusverwaltung in ASP.NET 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
23.1 Der Anwendungsstatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
23.2 Der Sitzungsstatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362Der standardmäßige prozessinterne Statusprovider . . . . . . . . . . . . . . . . . . . . . . 363Der ASP.NET-Statusserver-Provider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367Der SQL Server-Sitzungsstatus-Provider von SQL Server . . . . . . . . . . . . . . . . . . . . 371Ereignisse des Sitzungsstatus handhaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Inha
lt
15
23.3 Der Viewstate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
23.4 Statusverwaltung in Webfarmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378Der Anwendungsstatus in Webfarmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Der Sitzungsstatus in Webfarmen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Der Viewstate in Webfarmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
23.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Kapitel 24 Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
24.1 Als es noch keine Masterseiten gab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383Der Bedarf nach einer konsistenten GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Eine konsistente GUI in ASP.NET 1.1 erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
24.2 Einführung in Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Master- und Inhaltsseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Eine erste Masterseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Eine erste Inhaltsseite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Standardmäßige Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Hinter den Kulissen von Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
24.3 Erweiterte Techniken zu Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390Verschachtelte Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Die Eigenschaft »Master«. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Stark typisierte Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Relative Pfade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
24.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Kapitel 25 Personalisierung und Individualisierung mit ASP.NET . . . . . . . . . . . . . . . . . . 395
25.1 Maßgeschneiderte Benutzeroberflächen mit Stilen und Skins . . . . . . . . . . . . . 395
25.2 ASP.NET-Benutzerprofile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400Anwendungsdienste einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Profilprovider einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
ASP.NET-Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
25.3 Benutzeranpassung mit Stilen und Profilen . . . . . . . . . . . . . . . . . . . . . . . . . 408
25.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Kapitel 26 Einführung in Webparts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
26.1 Grundlagen zu Webparts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
26.2 Personalisierungsprovider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
26.3 Eine erste Webpart-Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Inhalt
16
26.4 Webparts erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
26.5 Verbundene Webparts erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
26.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Kapitel 27 Datengesteuerte benutzerfreundliche Webanwendungen . . . . . . . . . . . . . . . 435
27.1 Einführung in die Datenbindung in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . 435Das Datenquellenmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Datenquellen erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Datengebundene Steuerungshierarchie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
27.2 Datengebundene Steuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441Das GridView-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Das DetailsView-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Das FormView-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Das TreeView-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
27.3 Erweiterte Techniken zur Datenbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . 446Eine Objektdatenquelle erstellen und nutzen . . . . . . . . . . . . . . . . . . . . . . . . . . 446
27.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Kapitel 28 ASP.NET-Anwendungen schützen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
28.1 Sicherheit durch Authentifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449Windows-Authentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Passport-Authentifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Formularauthentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Benutzerverwaltung über Mitgliedschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
28.2 Sicherheit durch Autorisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458Autorisierung durch Rollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
28.3 Die Sicherheitssteuerelemente von ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . 462Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
LoginName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
LoginStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
LoginView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
PasswordRecovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
ChangePassword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
CreateUserWizard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
28.4 Erweiterte ASP.NET-Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468Geschützte Konfigurationseinstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
28.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Inha
lt
17
Kapitel 29 Benutzerdefinierte ASP.NET-Provider erstellen . . . . . . . . . . . . . . . . . . . . . . . 473
29.1 Der Mitgliedschaftsprovider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473Einführung in die Basisklasse MembershipProvider . . . . . . . . . . . . . . . . . . . . . . 474
Ein Mitgliedschaftsschema implementieren . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Einen benutzerdefinierten Mitgliedschaftsprovider erstellen. . . . . . . . . . . . . . . . . 476
Den Mitgliedschaftsprovider konfigurieren und installieren . . . . . . . . . . . . . . . . . 484
29.2 Der Rollenprovider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485Einführung in die Basisklasse RoleProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Ein Rollenschema implementieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Einen benutzerdefinierten Rollenprovider erstellen . . . . . . . . . . . . . . . . . . . . . . 487
Den Rollenprovider konfigurieren und installieren. . . . . . . . . . . . . . . . . . . . . . . 492
29.3 Der Profilprovider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493Einführung in die Basisklasse ProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Ein Profilschema implementieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Einen benutzerdefinierten Profilprovider erstellen . . . . . . . . . . . . . . . . . . . . . . . 494
Den Profilprovider konfigurieren und installieren . . . . . . . . . . . . . . . . . . . . . . . 499
29.4 Weitere Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Einführung in den SessionState-Provider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Einführung in den SiteMap-Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
29.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Kapitel 30 ASP.NET-Steuerelemente entwickeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
30.1 Benutzersteuerelemente erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
30.2 Serversteuerelemente erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
30.3 Statusverwaltung in Serversteuerelementen . . . . . . . . . . . . . . . . . . . . . . . . 512
30.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Kapitel 31 ASP.NET-Verwaltung und -Überwachung. . . . . . . . . . . . . . . . . . . . . . . . . . . 519
31.1 Einführung in die neue Systemüberwachung . . . . . . . . . . . . . . . . . . . . . . . . 519Die Systemüberwachung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Benutzerdefinierte Ereignisse erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
Benutzerdefinierte Ereignisprovider erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . 528
31.2 ASP.NET-Leistungsindikatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
31.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Inhalt
18
Teil 5 Webdienste 533
Kapitel 32 Funktionen mit Webdiensten bereitstellen . . . . . . . . . . . . . . . . . . . . . . . . . 535
32.1 Einführung in Webdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535Funktionsweise von Webdiensten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
32.2 Ein einfacher »Hello World«-Dienst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
32.3 Transaktionale Dienste erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
32.4 Statusverwaltung in Webdiensten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
32.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Kapitel 33 Erweiterte Webdienstprogrammierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
33.1 SOA-Design (Service-Oriented Architecture) . . . . . . . . . . . . . . . . . . . . . . . . . 549Lose Kopplung und Abhängigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
SOA als Lebenseinstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
33.2 Web Services Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
33.3 Benutzerdefinierte SOAP-Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
33.4 Sichere Webdienste programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
33.5 Datenbindung von Windows Forms an Webdienste. . . . . . . . . . . . . . . . . . . . 560
33.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Teil 6 Windows Forms 2.0 – Anwendungen entwickeln 565
Kapitel 34 Einführung in Windows Forms 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
34.1 Grundlagen von Windows Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567Windows Forms und Web-Formulare im Vergleich . . . . . . . . . . . . . . . . . . . . . . . 568
34.2 Eine Windows Forms-Anwendung erstellen . . . . . . . . . . . . . . . . . . . . . . . . . 570
34.3 Der Windows Forms-Designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571Das Dokumentgliederungsfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
Steuerelemente mit einrastenden Linien ausrichten . . . . . . . . . . . . . . . . . . . . . . 573
Größenveränderbare Formulare erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
34.4 Professionelles Design von Benutzeroberflächen. . . . . . . . . . . . . . . . . . . . . . 576Farbeinsatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Größenbewusstsein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Komplexität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Inha
lt
19
Die Anzahl der Klicks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Intuitives Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
34.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Kapitel 35 Die Steuerelementbibliothek von Windows Forms. . . . . . . . . . . . . . . . . . . . . 579
35.1 Allgemeine Steuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579Das Button-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Das CheckBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Das CheckedListBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Das ComboBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Das DateTimePicker-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Das Label-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Das LinkLabel-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Das ListBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
Das ListView-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
Das MaskedTextBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Das MonthCalendar-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Das NotifyIcon-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Das NumericUpDown-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Das PictureBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Das ProgressBar-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Das RadioButton-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Das TextBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Das RichTextBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
Das ToolTip-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
Das TreeView-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Das WebBrowser-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
35.2 Container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587Das FlowLayoutPanel-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Das GroupBox-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Das Panel-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
Das SplitContainer-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
Das TabControl-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
Das TableLayoutPanel-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
35.3 Menüs und Symbolleisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590Das ContextMenuStrip-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Das MenuStrip-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
Das StatusStrip-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
Inhalt
20
Das ToolStrip-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
Das ToolStripContainer-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
35.4 Steuerelemente zur Datenbearbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591Die DataSet-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Das DataGridView-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Die BindingSource-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Das BindingNavigator-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Das ReportViewer-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
35.5 Die Gruppe der Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593Die BackgroundWorker-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Die DirectoryEntry-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Die DirectorySearcher-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Die ErrorProvider-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Die EventLog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Die FileSystemWatcher-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Die HelpProvider-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
Die ImageList-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Die MessageQueue-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Die PerformanceCounter-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Die Process-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Die SerialPort-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Die ServiceController-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Die Timer-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
35.6 Komponenten und Steuerelemente für das Drucken . . . . . . . . . . . . . . . . . . . 597Die PageSetupDialog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Die PrintDialog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Die PrintDocument-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Die PrintPreviewControl-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Die PrintPreviewDialog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
35.7 Dialogfeldkomponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598Die ColorDialog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Die FolderBrowserDialog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Die FontDialog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Die OpenFileDialog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Die SaveFileDialog-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
35.8 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Inha
lt
21
Kapitel 36 Erweiterte Programmierung der Benutzeroberfläche . . . . . . . . . . . . . . . . . . . 601
36.1 Einführung in GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601Grafikobjekte abrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Ein »Hallo GDI+«-Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Formen zeichnen und ausfüllen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Verlaufspinsel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
36.2 Formulare und Steuerelemente mit Formen . . . . . . . . . . . . . . . . . . . . . . . . . 609
36.3 Visuelle Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
36.4 Die Benutzeroberfläche globalisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
36.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
Kapitel 37 Datenbindung mit Windows Forms 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
37.1 Bindung mit typisierten DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615Das Datenquellen-Fenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
Ein DataSet zu einem Formular hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
Ein Beispiel für die Bindung bei typisierten DataSets. . . . . . . . . . . . . . . . . . . . . . 618
37.2 Einführung in die BindingSource-Komponente. . . . . . . . . . . . . . . . . . . . . . . 620
37.3 Verwenden der BindingNavigator-Komponente . . . . . . . . . . . . . . . . . . . . . . 623Grundlagen zum BindingNavigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
Vom Benutzer ausgelöste Bindevorgänge . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
37.4 Arbeiten mit dem DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625Grundlagen zum DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
Eine ComboBox-Spalte in einem DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . 628
Erweiterte Anpassung der Zellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
Ein »ungebundenes« DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
37.5 Datenbindung mit Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634Grundlagen der Objektdatenbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Die Schnittstellen IEditableObject und INotifyPropertyChanges. . . . . . . . . . . . . . . . 636
37.6 Bindung von übergeordneten und Detailtabellen . . . . . . . . . . . . . . . . . . . . . 639
37.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Kapitel 38 Intelligente Clients entwickeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
38.1 Webdienstnutzung in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642Einen Webdienst-URL über UDDI abrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
38.2 Das neue System für Anwendungseinstellungen . . . . . . . . . . . . . . . . . . . . . . 643
38.3 Unterstützung für Offline- und Onlinebetrieb . . . . . . . . . . . . . . . . . . . . . . . 646
Inhalt
22
38.4 Benutzerauthentifizierung und -autorisierung . . . . . . . . . . . . . . . . . . . . . . 649
38.5 Nutzung von Multithread-Webdiensten . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
38.6 Die BackgroundWorker-Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
38.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
Kapitel 39 Anwendungen für ClickOnce bereitstellen . . . . . . . . . . . . . . . . . . . . . . . . . . 657
39.1 Einführung in ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
39.2 ClickOnce-Anwendungen veröffentlichen . . . . . . . . . . . . . . . . . . . . . . . . . . 660Bereitstellung über das Web oder eine Netzwerkfreigabe. . . . . . . . . . . . . . . . . . . 660
Bereitstellung auf CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
Direkter Start der Anwendung im Web oder auf der Netzwerkfreigabe . . . . . . . . . . 661
ClickOnce-Anwendungen bereitstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
39.3 ClickOnce-Anwendungen aktualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
39.4 Programmierung mit dem NamensraumSystem.Deployment. Application . . . . . 669
39.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Kapitel 40 Enterprise Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
40.1 Registrierung von COM+-Komponenten. . . . . . . . . . . . . . . . . . . . . . . . . . . . 675Manuelle Registrierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Automatische Registrierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
40.2 Just-in-Time-Aktivierung und Pooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
40.3 Komponenten in Warteschlangen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
40.4 Rollengestützte Sicherheit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
40.5 Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
40.6 Gemeinsam genutzte Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
40.7 Lose gekoppelte Ereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
40.8 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Teil 7 Verteilte und Unternehmensanwendungen entwickeln 693
Kapitel 41 Remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
41.1 Überblick über Remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695Einführung in die Klasse MarshalByRefObject . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Single-Call- und Singleton-Objekte im Vergleich . . . . . . . . . . . . . . . . . . . . . . . . 697
Inha
lt
23
41.2 Remotingkanäle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699Der IPC-Kanal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
Der TCP-Kanal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
41.3 Arbeiten mit Leasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
41.4 Remoting mit Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
41.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
http://www.mut.de/main/main.asp?page=deutsch/bookdetails&ProductID=107991http://www.pearsoned.de
7
Inha
lt
Inhalt
Geleitwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Hinweise zu den verwendeten Symbolen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Teil 1 Grundlagen 31
Kapitel 1 Einführung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.1 Was ist .NET? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.2 Programmiersprachen in Microsoft .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.3 Das .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Die Common Language Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Basisklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.4 ASP.NET im .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.5 ASP.NET im Vergleich zu ASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.6 ASP.NET 2.0 im Vergleich zu ASP.NET 1.x. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.7 Die ASP.NET-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Kapitel 2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.1 Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.2 Installation des .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Vorbereitungen zur Installation des .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Installation des .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3 Visual Web Developer Express Edition installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Inhalt
8
Kapitel 3 Spracheinführung Visual Basic 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.1 Zur Einführung: Die Geschichte von Visual Basic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.2 Programmierung mit dem Visual Web Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Erzeugung einer Website . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Das obligatorische »Hello World« . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.3 Grundbegriffe von Datentypen bis zu Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Standard-Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Strukturierte Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Kontrollstrukturen und Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.4 Programmelemente und Programmebenen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Funktionen und Prozeduren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Objektorientierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Zusammenstellung von Bibliotheken, Einbindung von Namespaces und externen Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
3.5 Visual Basic-Elemente des .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Standardfunktionen und Methoden zur Stringmanipulation. . . . . . . . . . . . . . . . . . . . . . 107
Andere nützliche Methoden und Funktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.6 Unterschiede zwischen Visual Basic 6 und Visual Basic 2005. . . . . . . . . . . . . . . . . . . 114Das ist neu eingeführt worden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Das hat sich verändert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.7 Kompilierung von Programmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Aufruf des Befehlszeilencompilers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3.8 Bedingte Kompilierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.9 Fehler- und Ausnahmebehandlung in Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . 118Strukturierte Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Die Exception-Klasse des .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Unstrukturierte Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Die Erzeugung von Ausnahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
9
Inha
lt
3.10 Support von Visual Basic im Visual Web Developer . . . . . . . . . . . . . . . . . . . . . . . . . . 125Ein erster Eindruck der Möglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Die Features des Visual Web Developer Editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Code erstellen mit IntelliSense-Unterstützung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Der Codeausschnitt-Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Dokumentation von Programmcode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
3.11 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Teil 2 Formulare und Steuerelemente 145
Kapitel 4 Formulare mit HTML Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
4.1 Formulardaten von Hand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148Versandmethode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Formularfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Ausgabe aller Formularangaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
4.2 Grundlegendes zu HTML Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
4.3 Formularversand mit HTML Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165Formular serverseitig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Versand ermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Das Formular ausblenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
4.4 HTML Controls im Einsatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Textfeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Passwortfeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Mehrzeiliges Textfeld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Checkbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Radiobutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Auswahlliste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Komplettes Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
4.5 Spezialfall File-Upload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
4.6 Daten im Kopfabschnitt der Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
4.7 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Inhalt
10
Kapitel 5 WebControls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
5.1 Textausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
5.2 Formularelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Textfelder (und Passwortfelder) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Checkbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Radiobutton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Auswahlliste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Drop-Down-Liste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
File-Uploads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Schaltfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
5.3 Control-Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
5.4 Weitere WebControls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Ein Kalender-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Mehrseitige Formulare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
5.5 Fazit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Kapitel 6 Formulare überprüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
6.1 Worum geht es? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
6.2 Validation Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230Pflichtfelder: RequiredFieldValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Eingaben im Intervall: RangeValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Werte vergleichen: CompareValidator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Musterprüfung: RegularExpressionValidator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Eigene Funktion: CustomValidator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
6.3 Fehlermeldungen ausgeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Validierungsergebnis: ValidationSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Dynamische Anzeige . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Layout der Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
6.4 Formulare teilweise validieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
6.5 Formular-Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Formular versenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Überprüfung abbrechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
6.6 Fazit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
11
Inha
lt
Kapitel 7 Benutzer- und benutzerdefinierte Steuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . 267
7.1 Vergleich der Steuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267Was sind benutzerdefinierte Steuerelemente? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Vor- und Nachteile der Steuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
7.2 Benutzersteuerelement definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268Attribute der Control-Direktive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
7.3 Inline-Code vs. Code Behind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
7.4 Benutzersteuerelement in einer Seite verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
7.5 Eigenschaften und Methoden verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
7.6 Ereignisse verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279Ereignisbehandlung per Handles-Schlüsselwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Ereignisbehandlung per AddHandler-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Deklarative Ereignisbehandlung per Attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
7.7 Dynamisches Laden von Benutzersteuerelementen . . . . . . . . . . . . . . . . . . . . . . . . . . 284
7.8 Benutzerdefiniertes Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
7.9 Benutzerdefiniertes Steuerelement verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
7.10 In benutzerdefinierten Steuerelementen auf Ereignisse reagieren . . . . . . . . . . . . . 291
7.11 Eigenschaften und Methoden von benutzerdefinierten Steuerelementen . . . . . . . 295Programmatischer Zugriff auf Eigenschaften und Methoden . . . . . . . . . . . . . . . . . . . . . . 297
7.12 Erweitern von existierenden Steuerelementen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
7.13 Attribute von benutzerdefinierten Steuerelementen. . . . . . . . . . . . . . . . . . . . . . . . . 301Attribute auf Klassenebene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Attribute auf Eigenschaftsebene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Weitere Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
7.14 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Inhalt
12
Teil 3 Web-Praxis 307
Kapitel 8 Seitenvorlagen und Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
8.1 Seitenvorlage definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309Eine abgeleitete Seite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Attribute der Master-Direktive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
8.2 Standardinhalte definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
8.3 Titel der Seite festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
8.4 Zentrale Funktionen in der Seitenvorlage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321Explizite Umwandlung des Vorlagentyps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Verwenden der MasterType-Direktive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Zugriff auf Eigenschaften und Methoden der Seitenvorlage . . . . . . . . . . . . . . . . . . . . . . . 324
8.5 Seitenvorlage deklarativ vererben/schachteln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
8.6 Seitenvorlage programmatisch vererben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
8.7 Seitenvorlage dynamisch laden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
8.8 Designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Design definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
8.9 Designs und Bilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
8.10 Zu verwendendes Design zentral festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
8.11 Zu verwendendes Design programmatisch festlegen . . . . . . . . . . . . . . . . . . . . . . . . . 338
8.12 Verhindern, dass Designs zugewiesen werden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
8.13 Design-Einstellungen nur auf Stylesheet-Ebene übernehmen . . . . . . . . . . . . . . . . . 341
8.14 Fazit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Kapitel 9 Authentifizierung und Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
9.1 Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
9.2 Einrichten der Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343Konfiguration des Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
13
Inha
lt
9.3 Konfiguration einer Web-Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Verwendung des Sicherheits-Setup-Assistenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Konfiguration ohne Assistenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Benutzer verwalten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Authentifizierungstyp festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Rollen verwalten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Zugriffsrechte verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
9.4 Authentifizierung manuell konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Festlegen des Authentifizierungsmodus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Hinterlegen von Benutzern in der web.config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Schutz von Verzeichnissen deklarieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Unterverzeichnis schützen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Einzelne Dateien formularbasiert schützen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
9.5 Windowsbasierte Authentifizierung (IIS-Authentifizierung) konfigurieren . . . . . . 367Einfache Absicherung aller Elemente einer Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . 367
IIS und web.config konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
9.6 Membership-Provider konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
9.7 Das Login-Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372Wichtige Eigenschaften des Login-Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Anmeldung über Membership-API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Dauerhafte Anmeldung realisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Länge der dauerhaften Anmeldung konfigurieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
9.8 Registrierung von Benutzern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
9.9 PasswordRecovery-Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
9.10 Den Namen des angemeldeten Users ausgeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386Verwenden von Membership.GetUser() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Verwenden des LoginName-Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
9.11 In Abhängigkeit vom Anmeldestatus arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
9.12 LoginView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
9.13 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Inhalt
14
Kapitel 10 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
10.1 Hinterlegen von Navigationsstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393SiteMapProvider konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Aufbau der web.sitemap-Datei. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Verteilen der Navigationsstruktur auf mehrere Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Ausnahmen für bestimmte Gruppen definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Unterschiedliche Anbieter verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
10.2 Programmatischer Zugriff auf Navigations-Strukturen . . . . . . . . . . . . . . . . . . . . . . . 401Alle Knoten ausgeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Pfad zum aktuellen Element ausgeben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
10.3 SiteMapDataSource-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408Verwenden des SiteMapDataSource-Steuerelements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Filtern von Elementen des SiteMapDataSource-Steuerelements. . . . . . . . . . . . . . . . . . . . 410
10.4 Menu-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412Verwenden des Menu-Steuerelements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Darstellungsarten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Navigationen kombinieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Navigationspunkte fest definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Schriften, Farben und Stile anpassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
10.5 TreeView-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423TreeView und SiteMapDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Statische Knoten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
TreeView programmatisch befüllen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Dynamische und statische Knoten kombinieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Knoten bei Bedarf laden und anzeigen lassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
TreeView und Client Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Informationen per PostBack übermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Schriften, Farben und Stile anpassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
10.6 SiteMapPath-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437Verwenden des SiteMapPath-Steuerelements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Richtung der Darstellung ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Trennzeichen festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Festlegen, wie viele übergeordnete Knoten angezeigt werden . . . . . . . . . . . . . . . . . . . . 439
Aktuelles Element als Link darstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Schriften, Farben und Stile anpassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
10.7 Fazit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
15
Inha
lt
Kapitel 11 Datenhaltung mit Cookies und Sessions und Profilen . . . . . . . . . . . . . . . . . . . . . . . . 443
11.1 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443Cookies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
Arbeiten mit Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Mehrere Informationen in einem Cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Cookie-Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
11.2 Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Mit einer Session arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
11.3 Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476Profile anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
Profile auslesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
Anonyme Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Kapitel 12 Datei-Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
12.1 Begriffe. . . . . . . . . . . . . . . . . . . . . . . .