Entwickler-Ecke

WinForms - Objektorientierte Datenbank mit List in Klassen aufbauen


master147 - Sa 13.04.13 21:51
Titel: Objektorientierte Datenbank mit List in Klassen aufbauen
Hallo,

ich wollte mal gerne ein Beispielprojekt machen, indem ich Daten von Benutzern in Listen speichere und wieder ausgeben kann. Das ganze möchte ich in einer Klasse Benutzer realisieren. Dort sollen die Daten in der Liste gespeichert werden.
Leider habe ich noch keine Ahnung wie ich Daten die über die Form eingegeben werden in einer Liste speichere und wieder ausgebe.

Könntet ihr mir vielleicht mal ein Beispielprojekt oder einen Pseudocode zeigen, damit ich weiß wie ich so etwas realisieren kann ?

Vielen Dank !


Christian S. - So 14.04.13 11:33

Hallo!


Also sagen wir mal, Du hast auf dem Formular Textboxen für Vor- und Nachname (tbVorname und tbNachname). Und Du hast eine Klasse Benutzer, die so aussieht:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
    public class Benutzer
    {
        public string Vorname { get; private set; }
        public string Nachname { get; private set; }

        public Benutzer(string vorname, string nachname)
        {
            this.Vorname = vorname;
            this.Nachname = nachname;
        }

        public override string ToString()
        {
            return Vorname + " " + Nachname;
        }
    }



Dann kannst Du in einem Button (z.B. "Benutzer hinzufügen) eine neue Instanz eines Benutzers in eine Liste eintragen:

C#-Quelltext
1:
2:
var benutzer = new Benutzer(tbVorname.Text, tbNachname.Text);
database.Add(benutzer);


Jetzt muss man sich noch Gedanken drum machen, was für eine Liste man als database verwendet. Ich würde eine Liste verwenden, die ohne mein Zutun der GUI sagt, wenn sich etwas geändert hat, wenn als ein Element hinzugefügt oder entfernt wurde. Da bietet sich in WinForms die BindingList<T> an:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        private BindingList<Benutzer> database = new BindingList<Benutzer>();

        public Form1()
        {
            InitializeComponent();

            listBox1.DataSource = database;  //<--- diese Zeile in den Konstruktor einfügen
        }



Mit dem Code sollte jetzt beim Hinzufügen eines neuen Benutzers dieser automatisch in der Listbox erscheinen.

Grüße,
Christian


master147 - So 14.04.13 13:52

Vielen Dank Christian!

gibt es auch eine Möglichkeit die Liste zu durchsuchen, denn leider habe ich database.search nicht gefunden ?


Ralf Jansen - So 14.04.13 14:12

Wenn du einfach wissen willst ob ein bestimmtes Object in der Liste enthalten ist dann mit der Contains [http://msdn.microsoft.com/en-us/library/ms132407(v=vs.100).aspx] Methode. Wenn du via irgendwelcher Kriterien aus der Benutzer Klasse etwas finden willst dann benutze LINQ [http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b].


master147 - So 14.04.13 15:06

Kann ich mit der Methode Contains denn auch das Objekt und die dazugehörigen Daten (Adresse, Ort ... ) mit anzeigen lassen ?


Ralf Jansen - So 14.04.13 15:14

Was hat suchen/finden mit dem anzeigen zu tun? Contains prüft nur ob ein Objekt in der Liste ist sonst nichts. Wenn du das Objekt hast kannst du alles damit tun und lassen was dir beliebt.


master147 - So 14.04.13 15:34

Naja, vielleicht habe ich mich etwas falsch ausgedrückt. Ich wollte in meiner Liste einen Benutzer finden und ihn samt seiner Daten in einer Textbox anzeigen lassen.

Aber wie kann ich denn, wenn ich das Objekt gefunden habe die Daten anzeigen lassen ?