Laden...

Objekte verschachteln bzw. aneinanderhängen

Erstellt von nasenkalli vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.697 Views
N
nasenkalli Themenstarter:in
23 Beiträge seit 2007
vor 15 Jahren
Objekte verschachteln bzw. aneinanderhängen

Hallo,

wie schaffe ich es Objekte zu verschachteln.
Konkretes Beispiel:
Ich drücke einen Button, darauf hin baut sich ein TreeView aus der Datenbank zusammen.
Den Tree hab ich rekursiv aufgebaut. Jeder Node hat eine eigene ID, eigene Rechte und ein RaiseEvent ob sich beim Click-Event eine Aktion ausgelöst werden darf.
Wenn sich nun nach klicken des Node ein DataGridView geöffnet wird, kann ich eine Row selektieren, welche wiederum eine eigene IDbesitzt. Das klicken auf eine Row öffnet sich eine ListView im unteren Teil der Form. Diese Einträge haben wiederum auch eine eigene ID. Zu diesem Eintrag soll es möglich sein einen Untereintrag zu erstellen usw.
D.h. alles hängt voneinander ab.
Wie schaffe ich es die einzelnen Objekte aneinander zu hängen bzw. zu verschachteln?
Mir fehlt da der Ansatz.

Danke euch.

3.511 Beiträge seit 2005
vor 15 Jahren

Deine Klassen müssten jeweils eine Eigenschaft anbieten, um andere Klassen aufzunehmen.

Also


public class Parent
{
  private List<Child> m_Childs = new List<Child>();

  public List<Child> Childs
  {
    get { return m_Childs; }
  }
}

public class Child
{
  private List<Child> m_Childs = new List<Child>();

  public List<Child> Childs
  {
    get { return m_Childs; }
  }
}

Man könnte auch direkt on Collection<T> ableiten


public class Parent: Collection<Child>
{

}

public class Child: Collection<Child>
{

}

Jetzt können alle Klassen x Beliebige Childs aufnehmen. Durch die Klasse Collection<Child> kannst du auch auf die Ereignisse reagieren, wenn Childs hinzugefügt oder entfernt werden.

Wenn Parent und Child zum Teil die gleichen Methoden verwenden, oder Eigenschaften haben, könnte man auch eine abstrakte Oberklasse erstellen, die dann ebenfalls von Collection<T> erbt.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

N
nasenkalli Themenstarter:in
23 Beiträge seit 2007
vor 15 Jahren

Hallo Khalid,

danke für deine Antwort, die für mich schon mal ein guter Ansatz ist.
Ich möchte allerdings das eine einzelne seperate Klasse alle Objekte aufnimmt.
Wie lässt sich das realisieren?

3.511 Beiträge seit 2005
vor 15 Jahren

Dann müsstest du nur eine Klasse erstellen, die wiederum als Collection die eigene Klasse anbietet.


public class Klasse: Collection<Klasse>
{

}

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Gelöschter Account
vor 15 Jahren

also ich persönlich halte die von dir geschilderten anforderungen für simple ablauflogik. eine verschachtelung ist hier meines erachtens nicht notwendig. z.b. macht es kein sinn für jeden treenode je ein datagridview zu erstellen und in diesen zu verpacken. das wäre sogar der supergau für jede gui.

das was du machen musst, ist alle controls entweder dynamisch erzeugen (also im code) oder aber diese im designer erzeugen und dann je nach bedarf einblenden bzw ausblenden.

also beispiel treeview noda anklicken -> datagridview anzeigen und befüllen:

  1. treeview anlegen
  2. datagridview anlegen
  3. treeview befüllen
  4. an das nodecklickevent hängen
  5. im eventhandler implementieren, das sich das datagridview in abhängigkeit vom selektierten node befüllt.

du siehst nun, das keine verschachtelung im hirarchischen sinne notwendig ist.

N
nasenkalli Themenstarter:in
23 Beiträge seit 2007
vor 15 Jahren

@Khalid:
Danke. Genau so werd ich es machen.

@JAck30lena:
Danke für die Antwort.

kein sinn für jeden treenode je ein datagridview zu erstellen und in diesen zu verpacken

Möchte ich aus nicht, wenn ich einen Node klicke werden die zu dem Node passenden Daten immer im gleichen DatagridView geöffnet.

  1. im eventhandler implementieren, das sich das datagridview in abhängigkeit vom selektierten node befüllt.

Genauso hab ich's gemacht.