AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TreeView - Child vom Child

Ein Thema von Tyler · begonnen am 1. Okt 2004 · letzter Beitrag vom 2. Okt 2004
Antwort Antwort
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#1

TreeView - Child vom Child

  Alt 1. Okt 2004, 20:41
Holla,

das einzig gute Tutorial zu TreeViews ist leider englisch, und das erschwert das Verständnis ungemein.

Also folgende Frage:

In einer DB lege ich verschieden Kategorien ab, die jeweils für sich Unterkategorien und diese wieder Unter-Kategorien.

Nun will ich das ganze "visualisieren"; in einem TreeView.

Das erstellen der obersten Oberkategorien, die Childs vom Rootnode, gelingt noch ganz gut.

Dann will ich aber zu den jeweiligen 1. Childs deren Childs addieren. Zu dem Zweck folgende Schleife:

Delphi-Quellcode:
 for i := 1 to Kategorien.Count do
  begin
    // ZUERST schau ich, ob in der DB für das 1. Child überhaupt "untere" Childs existieren
    // Das Feld Kategorie ist hierbei so aufgebaut:
    // 10 Stellen, je zwei Stellen für eine Ebene, von links beginnend
    // 0100000000 entspricht also dem ersten, obersten Node
    // 0101000000 wäre dann das 1. Child des ersten, obersten Node
    // 0102000000 ist das 2. Child
    // 0200000000 ist das 2. Child vom RootNode
    // mit dem folgenden SQL-Script finde ich also nacheinander alle Childs alle oberen Nodes
    q_Kategorien.SQL.Text := 'SELECT * FROM kategorien WHERE ' +
      'kategorie LIKE "' + StrToInt(i) + '%"';
    q_Kategorien.Open;
  end;

Nun steh ich vor dem Problem: Wie wähle ich jetzt das erste Child des Rootnodes in der TreeView selber aus.
Wenn das klar ist, kann ich dem schonmal ein weiteres Child zufügen.


Und dann die zweite Frage:

Ist das ganze sinnvoll, oder hab ich mich da ein bissel verzettel. Die maxmiale Tiefe entspricht ja 4 Ebenen. Ich müsste also 4 for-to-Schleifen ineinander verschachteln, um die TreeView zu füllen. Ist das auf performance-technischer Sicht sinnvoll, vertretbar?

Danke euch im Vorraus

tyler
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#2

Re: TreeView - Child vom Child

  Alt 2. Okt 2004, 11:04
*freu*

Ich habs selber, nachdem ich grübelnd eingeschlafen bin, heute morgen mir den Kopf über einer Schüssel Cornflakes zerbrochen hab, und beinahe wahnsinnig geworden bin, kam folgender Algo raus:

Delphi-Quellcode:
var
  i,j,k : Integer;
  vSub1 : Array of String;
begin
  q_Kategorien.SQL.Text := 'SELECT * FROM kategorien WHERE kat2 = 0';
  q_Kategorien.Open;
  q_Kategorien.First;

  j := q_Kategorien.RecordCount;
  SetLength(vSub1, j + 1);

  for i := 1 to j do
  begin
    vSub1[i] := q_Kategorien.FieldValues['kat1'];
    q_Kategorien.Next;
    Memo1.Lines.Add(vSub1[i]);
  end;

  i := 1;
  repeat
    q_Kategorien.SQL.Text := 'SELECT * FROM kategorien WHERE kat1 = ' +
      vSub1[i] + ' ORDER BY kat1, kat2';
    q_Kategorien.Open;
    if q_Kategorien.RecordCount = 1 then
    begin
      nSub1 := tv_Kategorien.Items.AddChild(nMain, q_Kategorien.FieldValues['bezeichnung']);
      Inc(i,1);
    end else begin
      nSub1 := tv_Kategorien.Items.AddChild(nMain, q_Kategorien.FieldValues['bezeichnung']);
      q_Kategorien.Next;
      Inc(i,1);
      for k := 1 to q_Kategorien.RecordCount - 1 do
      begin
        nSub2 := tv_Kategorien.Items.AddChild(nSub1, q_Kategorien.FieldValues['bezeichnung']);
        q_Kategorien.Next;
      end; // FOR K TO RECCOUNT - 1
    end; // IF RECCOUNT = 1
  until i = j + 1 // REPEAT UNTIL I = J
Das einzige ist: Ich musste die DB-Struktur ändern. Es gibt jetzt 3 Integer-Felder:
kat1, kat2, kat3.
Diese beinhalten für sich die Zahl der Kategorie. Kat3 ist erstmal noch ungenutzt, da das einbinden einer 3. Ebene mich erstmal überfordert - da warte ich auf ne kreative Phase im Laufe des WE *g*

Danke für eure geschätzte Aufmerksamkeit
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz