38

Visual C# 2005/ASP.NET 2.0 - *ISBN ... · Inhalt 8 2.2 Schleifen und Wiederholungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 Die

  • 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. . . . . . . . . . . . . . . . . . . . . . . .