Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
34m 39s
Das Speichern und Verwalten von Daten in einer C# WinForms-Anwendung geht über das einfache Platzieren von Steuerungen auf einem Bildschirm hinaus. Es geht darum, wie Daten aus einer Datenbank oder Datei in Modelle gelangen und dann innerhalb eines Windows-Forms gebunden, angezeigt und manipuliert werden. In Lektion 15 des Kurses "C# From Start to Finish" führt Tim Corey Entwickler durch diesen Prozess auf sehr praktische Weise, indem er das Create Tournament Form erstellt.
In diesem Artikel betrachten wir die Konzepte der C# WinForms-Datenspeicherung genauer, genau so, wie Tim sie in seinem Video erklärt. Wir navigieren durch seine Schritte in Visual Studio, folgen, wie er Daten abruft, sie an Steuerungen bindet, Probleme debuggt und Ergebnisse überprüft.
Bei 0:00 stellt Tim Corey Lektion 15 vor und erklärt, dass dieses Windows-Formular ein entscheidender Wendepunkt in der Anwendung ist. Er stellt fest, dass die App, sobald dieses Formular abgeschlossen ist, größtenteils funktional sein wird. Obwohl dieses Formular komplex aussieht, beruhigt Tim die Entwickler, dass das System die meisten erforderlichen Funktionen bereits unterstützt.
Er betont, dass durch die bisher geleistete Arbeit — Modelle, Datenschnittstellen, Tabellen und Muster — bereits eine starke Grundlage geschaffen wurde. Das Ziel ist jetzt, Daten mit dem Formular zu verbinden und als System zu arbeiten, nicht als isolierte Steuerungen.
Bei 1:10 erklärt Tim, dass er, wann immer er ein Windows-Formular startet, zunächst überprüft, was das Formular tut, und es in logische Teile unterteilt. Er bemerkt sofort ein kleines Problem im Designer: Zwei Listenfelder haben aufgrund eines Kopieren-Einfüge-Fehlers denselben Beschriftungstext.
Tim korrigiert den Beschriftungstext, bevor er fortfährt, und weist darauf hin, dass kleinere UI-Probleme frühzeitig gelöst werden sollten. Dieser Schritt verstärkt, dass sauberes Design und Klarheit genauso wichtig sind wie der Code, wenn Daten einem Benutzer angezeigt werden.
Bei 2:07 umreißt Tim, wie er normalerweise an dieses Formular herangehen würde, wenn er kein Video aufnehmen würde. Er erklärt, er würde:
Das Dropdown-Menü 'Team auswählen' ausfüllen
Das ausgewählte Teams-Listenfeld ausfüllen
Die Aktion 'Team hinzufügen' verknüpfen
Preise bearbeiten
Sich später mit Erstell- und Löschaktionen beschäftigen
Da dies eine Video-Lektion ist, gruppiert Tim mehrere Stücke zusammen. Dieser Planungsschritt ist kritisch, da er definiert, wie Daten zwischen Sammlungen, Steuerungen und Ereignissen innerhalb der WinForms-Anwendung fließen.
Bei 3:45 wechselt Tim mit F7 zur Codeansicht und navigiert durch den Lösungsexplorer in die code-behind-Datei des Formulars. Er erklärt, dass das Dropdown-Menü 'Team auswählen' eine Sammlung von TeamModel-Objekten benötigt.
Er erstellt eine Liste <TeamModel> namens availableTeams. Diese Liste dient als In-Memory-Speicher für Daten, die von der Datenquelle abgerufen werden. Tim stellt fest, dass es vorerst als neue Liste initialisiert wird, aber später entweder von einer Datenbank oder einer Textdatei gefüllt wird, abhängig von der Konfiguration.
Dies ist ein wichtiger Moment, in dem Tim zeigt, dass WinForms Daten in Sammlungen speichern, nicht direkt in Steuerungen.
Bei 5:01 erstellt Tim eine Methode namens GetTeamAll. Er erklärt, dass diese Methode zu früher im Projekt verwendeten Mustern passt, wie GetPersonAll. Er fügt sie der IDataConnection-Schnittstelle hinzu und nennt es den Vertrag, der definiert, wie Daten abgerufen werden.
Er implementiert diese Methode dann sowohl im SQL- als auch im Textconnector. Tim betont hier Beständigkeit und erklärt, dass die Befolgung etablierter Muster das System leichter wartbar und verständlich macht.
Bei 6:32 navigiert Tim zu SQL Server und erläutert gespeicherte Prozeduren. Er überprüft bestehende Prozeduren und erklärt, warum sie für diesen Fall nicht geeignet sind. Da das Turnier noch nicht existiert, erstellt er eine neue gespeicherte Prozedur namens spTeam_GetAll.
Diese Prozedur:
Nimmt keine Parameter
Führt eine einfache Select-Anweisung aus
Ruft alle Teamdatensätze aus der Teams-Tabelle ab
Tim führt die Prozedur aus und überprüft die zurückgegebenen Daten. Dieser Schritt stellt sicher, dass die Datenquelle funktioniert, bevor sie an das Formular gebunden wird.
Bei 8:45 erklärt Tim, dass das Abrufen von Teams allein nicht genügt. Jedes Team enthält auch eine Liste von Mitgliedern, die in einer separaten Tabelle gespeichert sind. Er zeigt, wie das TeamModel eine TeamMembers-Sammlung enthält, die manuell gefüllt werden muss.
Um dies zu tun, durchläuft Tim jede Team mit einer foreach-Schleife. Für jede Team-Instanz ruft er eine weitere gespeicherte Prozedur auf, die Personen anhand der Team-ID abruft. Dieser Prozess erstellt ein vollständig besetzes Modell mit verwandten Daten.
Tim weist darauf hin, dass dieser Schritt sicherstellt, dass die Anwendung vollständige Datenobjekte, nicht teilweise Datensätze hat.
Bei 12:25 kehrt Tim zum Create Tournament-Formular zurück und ersetzt die temporäre Liste durch einen echten Datenabruf mit:
GlobalConfig.Connection.GetTeamAll()
Diese Zeile ruft Daten mit der konfigurierten Verbindungszeichenfolge ab und speichert sie im Speicher.
Er erstellt dann eine InitializeLists-Methode, die Daten an UI-Steuerelemente bindet, indem folgendermaßen eingestellt wird:
Datenquelle
Anzeigemitglied
Tim wählt sorgfältig TeamName als Anzeigeeigenschaft aus, um sicherzustellen, dass dem Benutzer bedeutungsvoller Text anstelle von Objektverweisen angezeigt wird.
Bei 15:17 führt Tim die Anwendung aus und stößt auf einen Fehler im Zusammenhang mit einem fehlenden Parameter. Ruhig liest er die Nachricht, erklärt, dass Debugging ein normaler Teil der Entwicklung ist.
Er behebt das Problem, indem er den erforderlichen Parameter übergibt und den Befehlstyp auf gespeicherte Prozedur setzt. Wenn das Dropdown-Menü immer noch leer erscheint, untersucht Tim weiter.
Bei 22:35 erkennt er, dass die InitializeLists-Methode nie aufgerufen wurde. Sobald sie dem Konstruktor hinzugefügt wurde, werden die Daten korrekt angezeigt. Tim nutzt diesen Moment, um die Bedeutung der Überprüfung, wie die Teile im System zusammenpassen, zu betonen.
Bei 23:54 erstellt Tim eine weitere Liste namens selectedTeams. Diese Sammlung speichert die für das Turnier ausgewählten Teams. Er erklärt, dass dieses Muster identisch mit früheren Formularen im Projekt ist und die Wiederverwendung und Konsistenz verstärkt.
Er bindet diese Liste an ein weiteres Listenfeld mit demselben Anzeige-Member, was es einfach macht, ausgewählte Elemente anzuzeigen.
Bei 28:07 doppelklickt Tim auf den Add Team-Button im Designer, um das Klickereignis zu generieren. Er ruft das ausgewählte Element aus dem Dropdown ab, wandelt es in ein TeamModel zurück und überprüft, ob es nicht null ist.
Dann entfernt er das Team aus availableTeams, fügt es zu selectedTeams hinzu und bindet beide Listen erneut. Tim erklärt, dass das Zurücksetzen der Datenquelle sicherstellt, dass die UI Änderungen sofort widerspiegelt.
Bei 32:13 fasst Tim zusammen, was erreicht wurde:
Daten aus der Datenbank abgerufen
In Sammlungen gespeichert
An WinForms-Steuerelemente gebunden
Zwischen Listen verschoben
Debuggt und überprüft
Er merkt an, dass die verbleibende Arbeit auf dieser Grundlage aufbauen wird.
Tim schließt das Video ab, indem er Entwickler ermutigt, weiter zu üben. Er erinnert die Zuschauer daran, dass das Verständnis, wie Daten in einer C# WinForms-Anwendung gespeichert, abgerufen und angezeigt werden, entscheidend für den Aufbau zuverlässiger Systeme ist.
Diese Lektion zeigt, wie Entwickler mit realen Daten, echten Fehlern und wirklichen Arbeitsabläufen umgehen – Schritt für Schritt, genau wie Tim Corey es demonstriert.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy