Autor Beitrag
StephanB
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 24.07.15 13:19 
Guten Tag ins Forum.

Ich beschäftige mich nun seit einiger Zeit mit C# und würde mich als ambitionierten Einsteiger bezeichnen. Ich arbeite gerade an einem Programm das Datenbankbasiert Objekte verwalten soll (Trainingsprojekt das etwas umfangreicher ist), in dem konkreten Beispiel sollen Kundenserver inventarisiert werden.

Dazu habe ich mir eine relationale DB erstellt die KD, Hersteller, CPU, RAM, etc umfasst und untereinander mit Fremdschlüsseln verknüpft sind.

Mein Programm soll Dropdown-Menüs beinhalten, welche je nach Auswahl nur bestimmte weitere Auswahlmöglichkeiten zulassen.

Beispiel, wählt man beim Hersteller Dropdown "Apple" aus, so soll im Geräte-Dropdown nur "Notebook" oder "Desktop" erscheinen, wählt man im Hersteller-Dropdown "IBM" aus so soll "Server", "Notebook", "Desktop" angezeigt werden, und so fort.

Soweit kein Problem, da ich das mit Linq schön abfragen kann. Wobei ich jetzt aber verzweifle sind meine Listen. Ich möchte im Programm selbst die Abfragen nicht in Arrays speichern sondern in einer generischen Liste.

Also statt ein Array zu initialisieren das die Objekte vorhält hätte ich gerne eine Liste erstellt.

Warum die Liste?

Vielleicht liegt hier auch mein Verständnisproblem: Laut meiner Lehrbücher und Tutorials, kann ich Arrays nicht dynamisch erweitern, sprich, wenn einer Kategorie neue Objekte zugewiesen werden ("Apple" und "Server") müsste ich das Array neu definieren. Über List<T> jedoch wäre das Programm hier dynamisch. Und genau da setzt mein Problem an. Ich schaffe es nicht eine Liste mit Objekten zu erstellen oder zu adressieren. Ich weiß nicht was ich falsch mache oder ob das überhaupt wirklich geht.

Im Konkreten stelle ich mir das so vor:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
// Die Klasse Server grob umrissen

class Server {

    public String Hersteller {get; set;}

    public String CPU {get; set;}

    public String Kategorie {get; set;}

    public Server(string herst, string cpu, string kat){

        this.Hersteller = herst;
        this.CPU = cpu; 
        this.Kategorie = kat;

        return;
    }
}

// Nun möchte ich eine Liste erstellen die zu Beginn noch keine Objekte enthält später aber Serverobjekte enthält und auf deren Attribute zugreifen kann
// Wenn ich so vorgehe erhalte ich Fehlermeldungen: 

List<Server> _liste = new List<Server>();

_liste.Add("IBM""Intel""Server");

//Ende


ziemlich vereinfacht aber im Kern mein Problem. Visual Studio sagt ich möchte eine Feld wie einen Typen verwenden, dabei dachte ich, ich könnte mit Listen alle Möglichen Datentypen verwalten.

Ich hoffe ich konnte mein Problem so schildern, dass es verständlich ist, aber ich laboriere jetzt schon mehrere Tage dran rum und mittlerweile sitze ich vor einem gordischen Knoten. Vielleicht hat jemand erbarmen und zeigt mir auf wo mein Fehler liegt.

Danke im Voraus.

Gruß Stephan.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 24.07.15 13:28 
Du must auch eine Instanz der Klasse Server nehmen du kannst nicht einfach die Werte die in den Konstruktor gehören in die Add Methode der Liste werfen.
a.) Dann müßte ja eine neue Instanz der Server Klasse angelegt werden, vielleicht willst du aber eher bereits vorhandene Instanzen verwenden.
b.) Dann wären es immer Server Instanzen, es sind aber natürlich genauso Ableitungen von Server erlaubt (denn die erfüllen ja auch die Server Oberfläche).

Also

ausblenden C#-Quelltext
1:
_liste.Add(new Server("IBM""Intel""Server"));					


Wobei ich mich schwer tuhe zu verstehn wie du von einer Datenbank die du über Linq verwendest bei Arrays landen könntest. Das erscheint mir unsinnig.

Für diesen Beitrag haben gedankt: StephanB
StephanB Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 24.07.15 13:32 
Danke für die Antwort


Naja der Gedanke hinter dem Array ist der, die Datenbank nach passenden Objekten abzufragen und diese im Array zu speichern, oder eben in der Liste und dann aus dem Array/der Liste die Objekte zu bearbeiten und dann zurück zu schreiben.

Ebenso soll es möglich sein, neue Objekte zu erstellen, da ja immer wieder neue Geräte ausgeliefert werden.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 24.07.15 13:44 
Wenn du mit Linq meintest du benutzt Linq2Sql oder Entity Framework hast du bereits alles in Listen mit den passenden Methoden. Das in Arrays umzufüllen klingt nach überflüssigem Aufwand.

Für diesen Beitrag haben gedankt: StephanB
StephanB Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 24.07.15 14:01 
Ja ich sag ja Verständnis und Anfängerproblem. Du hast natürlich Recht. Ich hab mich so in das Problem verrannt... Aber klar ich kann eine Abfrage starten und der Combo-Box je nach Auswahl die Anzeigewerte über die Abfrage angeben.

Der Wald vor lauter Bäumen. Oh man... Danke für deine Zeit.