C#-Anwendungsentwicklung: Ein tiefer Einblick durch Tim Coreys „Teamformular Teil 2“ (Lektion 13)
In diesem Artikel werden wir einen tieferen Blick auf die C#-Anwendungsentwicklung werfen, indem wir Tim Coreys Lektion 13 aus seiner Serie "C# App Start to Finish" folgen. Tim führt uns durch den Prozess der Erstellung einer funktionalen Windows Forms-Anwendung und konzentriert sich darauf, wie man UI-Steuerelemente wie Kombinationsfelder, Listenfelder und Schaltflächen mit Daten verbindet. Diese Lektion demonstriert Schlüsselkonzepte wie Datenbindung, Listenverwaltung, Datenbankverbindungen mit Dapper und grundlegende Validierung und Debugging — alles wesentliche Fähigkeiten zum Aufbau realer C#-Anwendungen.
Fortsetzung des Formulars 'Create Team'
Tim beginnt damit, uns daran zu erinnern, dass Lektion 13 eine Fortsetzung des vorherigen Videos ist, in dem der Abschnitt "Add New Member" verbunden wurde. In dieser Lektion erklärt Tim, dass das Hauptziel darin besteht, das Dropdown (Kombinationsfeld) und das Listenfeld zu verbinden und dann das neu erstellte Personenobjekt so zu verknüpfen, dass es in der Liste erscheint. Tim legt den Plan klar fest: Diese Lektion wird sich auf die Verkabelung der UI, die Datenbewegung und die Synchronisierung der Liste konzentrieren — fundamentale Aspekte beim Aufbau einer C#-Desktop-Anwendung.
Verstehen der Daten im Drop-down- und Listenfeld
Tim erklärt, dass hinter dem Kombinationsfeld und dem Listenfeld eine Liste von Personenobjekten stehen wird. Dies ist ein klassisches Beispiel für Datenbindung in Windows Forms, bei der UI-Elemente an Sammlungen von Datenmodellen gebunden sind.
Er erstellt zwei private Listen auf Klassenebene:
-
availableTeamMembers – die Personen, die zum Team hinzugefügt werden können
- selectedTeamMembers – die Personen, die bereits dem Team hinzugefügt wurden
Tim klärt das erwartete Verhalten: Wenn eine Person aus dem Dropdown ausgewählt und hinzugefügt wird, sollte sie von availableTeamMembers zu selectedTeamMembers wechseln. Dies ist ein standardmäßiges CRUD-Operationsmuster in der Desktop-Anwendungsentwicklung, bei dem die UI die zugrunde liegenden Daten widerspiegelt.
Warum Tim Teammitglieder nicht nach Turnier begrenzt
Tim geht auf eine häufige Designfrage ein: "Warum nicht Teammitglieder basierend auf dem Turnier einschränken?" Er erklärt, dass das Formular 'Create Team' nicht direkt an ein Turnier gebunden ist und mehrere Turniere gleichzeitig laufen könnten.
Tim verwendet ein praktisches Beispiel: Wenn sowohl ein Basketballturnier als auch ein Tischtennisturnier laufen, könnte eine Person an beiden teilnehmen. Das Begrenzen des Dropdown würde komplexe Logik erfordern und könnte Fehler einführen. Stattdessen wählt Tim einen einfacheren Ansatz:
- Eine Person nur aus dem Dropdown entfernen, nachdem sie einem Team hinzugefügt wurde.
Dieser Ansatz demonstriert eine praxisnahe Software-Design-Entscheidung: Vermeiden Sie Überkomplexität, es sei denn, es ist erforderlich.
Erstellen der Methode 'WireUpLists'
Tim erstellt eine Methode namens WireUpLists, um die Listen mit UI-Steuerelementen zu verbinden. Diese Methode bindet die Liste availableTeamMembers an das Kombinationsfeld und die Liste selectedTeamMembers an das Listenfeld.
Tim weist auf eine wichtige Verbesserung hin: In modernen Windows Forms können Sie Listen direkt an Steuerelemente binden, ohne eine separate BindingSource zu verwenden. Dies ist ein hilfreicher Tipp für Entwickler, die an der Datenbindung von Windows Forms arbeiten.
Hinzufügen von DisplayMember mit vollem Namen
Tim erklärt, dass das Kombinationsfeld einen lesbaren Namen anzeigen muss. Die DisplayMember-Eigenschaft erwartet eine Zeichenfolgeigenschaft aus dem Personmodul. Tim warnt, dass die Verwendung von nur Vorname oder Nachname Duplikate verursachen kann.
Also erstellt Tim eine schreibgeschützte Eigenschaft namens FullName:
public string VollständigerName
{
get
{
return "${FirstName} ${LastName}";
}
}
Dies demonstriert eine wichtige UI-Praxis: Stellen Sie immer sicher, dass Ihre UI benutzerfreundliche Informationen anzeigt, nicht Rohdatenobjekte.
Erstellen von Beispieldaten für Tests
Tim erstellt eine Methode namens CreateSampleData, um die Listen und die UI zu testen. Er fügt beiden Listen Beispielpersonenobjekte hinzu und ruft WireUpLists im Konstruktor auf.
Dies ist eine nützliche Technik, um Windows Forms-Anwendungen schnell zu erstellen und zu testen, bevor sie mit einer echten Datenbank verbunden werden.
Ersetzen von Beispieldaten durch echte Daten
Tim kommentiert die Beispieldaten aus und bereitet sich darauf vor, echte Daten zu laden. Er fügt eine Methode GetPerson_All zur IDataConnection-Schnittstelle hinzu. Tim erklärt seine Namenskonvention:
-
Create = einfügen
- Get = auswählen
Dies ist eine standardmäßige Namensstrategie für Datenschichten in C#-Anwendungen.
Implementierung von SQL-Datenabruf mit Dapper
Tim implementiert die SQL-Version von GetPerson_All mit Dapper und einem gespeicherten Verfahren:
connection.Query<PersonModel>("spPeople_GetAll").ToList();
Tim verwendet absichtlich eine Ausgabeveriablen anstelle einer direkten Rückgabe, um das Debuggen zu erleichtern. Dies zeigt, dass Debugging-Praktiken das Code-Design beeinflussen können.
Bereinigungen von wiederholtem Code mit Konstanten
Tim bemerkt wiederholte Namen von Verbindungszeichenfolgen und ändert diese in eine Konstante. Er erklärt, dass Wiederholungen schlechte Praxis sind und später Fehler verursachen können.
Dies ist ein wichtiges Software-Engineering-Prinzip: DRY (Don't Repeat Yourself).
Laden echter Daten in das Dropdown
Tim erstellt LoadListData() und füllt availableTeamMembers mit GetPerson_All(). Die Liste selectedTeamMembers bleibt leer, was korrekt ist, da ein neues Team leer startet.
Dies zeigt, wie man die UI mit echten Datenquellen verbindet, sei es eine Datenbank oder eine Textdatei.
Verkabelung des Schalters 'Add Member'
Tim erstellt das Ereignishandler des Schalters Add Member. Die Logik ist:
-
Ausgewählte Person aus dem Dropdown abrufen
-
Sie von der verfügbaren Liste entfernen
-
Sie zur ausgewählten Liste hinzufügen
- Die UI aktualisieren
Tim erklärt, dass das ausgewählte Element in PersonModel umgewandelt werden muss, da das Kombinationsfeld Objekte als object speichert. Dies hebt die Bedeutung von Typumwandlung und Objektverarbeitung in C# hervor.
Debuggen des Refresh-Problems
Tim stellt fest, dass die UI sich nicht aktualisiert, nachdem Elemente verschoben wurden. Nach dem Debuggen findet er die Lösung:
-
Setze DataSource auf null
- Dann die Liste neu zuweisen
Dies zwingt das Kombinationsfeld und das Listenfeld zur Aktualisierung. Tim betont, dass Debugging-Fähigkeiten entscheidend sind und oft erforderlich sind, um zu verstehen, wie sich die Datenbindung verhält.
Verkabelung des Schalters 'Remove Selected'
Tim benennt den Schalter in Remove Selected um und erstellt den Ereignishandler. Dies kehrt den Hinzufügevorgang um:
-
Entfernen aus selectedTeamMembers
-
Zurückfügen zu availableTeamMembers
- UI aktualisieren
Tim entdeckt einen Fehler: Wenn kein Element ausgewählt ist, wird ein Nullwert hinzugefügt. Er fügt eine Validierung hinzu:
if (p != null)
{
// fortfahren
}
Dies zeigt grundlegende Validierung und Fehlervermeidung.
Die Bedeutung von Tests
Tim betont, Ihre Anwendung zu testen wie ein Benutzer, der sie zu zerstören versucht. Er rät, Tester zu haben, die absichtlich versuchen, die App zu zerstören, da echte Benutzer unerwartete Aktionen ausführen werden.
Dies ist eine wichtige Lektion für den Bau zuverlässiger Software.
Verkabelung des Schalters 'Create Member'
Tim modifiziert den Schalter 'Create Member', um eine neue Person im Datenspeicher zu speichern und sie sofort zur ausgewählten Liste hinzuzufügen. Dies demonstriert, wie man CRUD-Operationen in einer Windows Forms-Anwendung implementiert.
Implementierung von GetPerson_All für Textdatei
Tim merkt, dass die Textversion von GetPerson_All fehlt. Er implementiert es mit einer einfachen Zeile:
return PeopleFile.FullFilePath.LoadFile().ConvertToPersonModels();
Dies zeigt, dass dateibasierte Speicherung leicht implementiert werden kann, ohne komplexe Logik.
Bestätigung, dass alles funktioniert
Tim führt die App aus und bestätigt, dass das Dropdown jetzt Personen aus der Textdatei und der Datenbank lädt. Er fügt neue Personen hinzu und sieht sie sofort auftauchen, was zeigt, dass das gesamte System richtig funktioniert.
Wie geht es weiter?
Tim schließt ab, indem er erklärt, dass sich das nächste Video auf die Erstellung des Teams selbst konzentrieren wird. Dies beinhaltet das Speichern mehrerer Datenteile in die Datenbank oder Textdatei und vervollständigt das Feature.
Abschließende Gedanken
Tim Coreys Lektion 13 ist ein praxisnahes Beispiel für die Entwicklung von C# Windows Forms-Anwendungen. Von der Verkabelung von UI-Steuerelementen und Datenbindung bis hin zu Debugging und Validierung lehrt Tim praktische Programmierfähigkeiten zur Erstellung echter Desktop-Anwendungen. Diese Lektion ist besonders wertvoll für Entwickler, die Datenbindung, Dapper, SQL-CRUD-Operationen und UI-gesteuerte Programmierung in C# lernen möchten.
Wenn Sie weiter lernen möchten, wird Tims nächste Lektion das Team-Erstellungs-Feature vervollständigen und alles zu einer funktionierenden Anwendung zusammenbringen.
