AGB  ·  Datenschutz  ·  Impressum  







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

Frage zur TreeView

Ein Thema von Akut-Programming · begonnen am 7. Sep 2004 · letzter Beitrag vom 9. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#1

Frage zur TreeView

  Alt 7. Sep 2004, 12:57
Hi,

ich will in meiner TreeView erst alle "Hauptknoten" hinzufügen (klappt auch schon) und dann die einzelnen Childs. Die Daten hole ich aus einer MySQL DB. Wenn ich nun die Hauptknoten angelegt habe, wie bekomme ich dann noch eine genaue Zuordnung hin? Bsp: In der einen Tabelle habe ich die Hauptknoten stehen z.b: "Autos" und "Motoräder". In einer anderen Tabelle stehen die Items, die dann als Child eingefügt werden sollen. Diese Tabelle hat auch eine Spalte "GroupID" über die ich dann einen Bezug auf z.B. "Autos" herstelle. Da dies das erste mal ist, wo ich mit einer TreeView arbeite, bin ich da jetzt etwas ratlos. - Die Delphi-Hilfe brachte mir auch keinen Erfolg. Ich hoffe, mein Anliegen ist verständlich erklärt!?

Gruß,
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
andianon

Registriert seit: 2. Dez 2003
Ort: Wechselnd
28 Beiträge
 
Delphi 5 Enterprise
 
#2

Re: Frage zur TreeView

  Alt 7. Sep 2004, 13:10
Idealerweise hast du Objekte, z.B. auf Basis der Klasse "TAuto". Diese Klasse enthält als Attribut die GruppenID. Das erzeugt Objekt referenzierst du mit in dem Knoten. Ab jetzt musst du nur noch den Knoten mit dem Objekt der entsprechenden GruppenID suchen und an diesem einen neuen Knoten erzeugen über den du z.B. das Objekt "VW Golf 3..." referenzierst.

Oder für quick'n'dirty: Merk dir den AbsoluteIndex bzw. Index von TTreeNode, den du für "Autos" anlegst und hang alle einzelnen Autos an den Knoten mit diesem AbsoluteIndex. ACHTUNG: Eingefügte Knoten verschieben den Index.

Gruß Andi
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

Re: Frage zur TreeView

  Alt 7. Sep 2004, 13:10
es macht mehr sinn, wenn du erst einen hauptgruppenzweig erstellst und dann alle dazugehörigen kindknoten.... dann den zweiten hauptgruppenzweig etc
  Mit Zitat antworten Zitat
andianon

Registriert seit: 2. Dez 2003
Ort: Wechselnd
28 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Frage zur TreeView

  Alt 7. Sep 2004, 13:12
Da hat mein Vorgänger definitiv Recht!
Ein Baum schreit förmlich danach den Weg bis zum Leaf durchzugehen.

Gruß Andi
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#5

Re: Frage zur TreeView

  Alt 7. Sep 2004, 14:37
ich habs mal versucht umzusetzen..
Delphi-Quellcode:
procedure TfrmMain.GetObjects();
var
   ListItem: TTreeNode;
   i: integer;
   AktGroup: Integer;
begin
     lvProjekte.Items.Clear;

     dsGetObjects.Active:=false;
     dsGetObjects.CommandText:='select * from objects_tbl';
     dsGetObjects.Active:=true;
     dsGetObjects.First;

     for i:=0 to dsGetObjects.RecordCount -1
     do begin
        AktGroup:=dsGetObjects.Fields.Fields[1].AsInteger;
        if dsGetObjects.Fields.Fields[1].AsInteger = AktGroup
        then begin
             if dsGetObjects.Fields.Fields[1].AsInteger <> AktGroup
             then AktGroup:=dsGetProjects.Fields.Fields[1].AsInteger;
             dsGetGroupID.Active:=false;
             dsGetGroupID.CommandText:='select bezeichnung from groups_tbl where id= '''+IntToStr(AktGroup)+'''';
             dsGetGroupID.Active:=true;
              with lvObjects.Items
              do begin
                 ListItem := Add(nil, dsGetGroupID.Fields.Fields[0].AsString);
                 AddChild(ListItem, dsGetObjects.Fields.Fields[2].AsString);
              end;
              dsGetProjects.Next;
        end;
     end;
end;
Er setzt zwar die Einträge nach Anzahl der Daten im recordcount, aber er wählt nicht das nächste Obejekt, welches in einer anderen Gruppe stehen würde.
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#6

Re: Frage zur TreeView

  Alt 7. Sep 2004, 14:59
überprüfe deinen code nochmal...


Code:
Schritte:

1. hole alle gruppen
2. nimm 1. datensatz aus der gruppe
3. erstelle einen baumknoten gruppe
4. holle alle daten die zur gruppe gehören
5. nimm 1.datensatz aus untergruppe
6. erstelle einen kindknoten zur aktuellen gruppe
7. nächster datensatz aus untergruppe
8. weiter bei 6. solange noch datensätze vorhanden sind
9. nächster datensatz aus gruppe
10. weiter bei 3. solange noch datensätze vorhanden sind
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#7

Re: Frage zur TreeView

  Alt 8. Sep 2004, 08:11
Nice!! - Ich hab mich da jetze mal rangesetzt, da ich gestern noch an nem anderen Projekt weiter arbeiten musste.. es funzt endlich! Dank dir ibp.

Delphi-Quellcode:
procedure TfrmMain.GetObjects();
var
   ListItem: TTreeNode;
   i, i2: integer;
begin
     lvObjects.Items.Clear;

     //Alle Gruppenbezeichnungen laden
     dsGetGroupID.Active:=false;
     dsGetGroupID.CommandText:='select * from groups_tbl';
     dsGetGroupID.Active:=true;
     //Ersten Datensatz auswählen
     dsGetGroupID.First;
     //Baumknoten erstellen - Solange wiederholen, wie Gruppen vorhanden sind
     for i:=0 to dsGetGroupID.RecordCount -1
     do begin
        with lvObjects.Items
        do begin
           ListItem := Add(nil, dsGetGroupID.Fields.Fields[1].AsString);
        end;
        //Alle Objekte zur Gruppe laden
        dsGetObjects.Active:=false;
        dsGetObjects.CommandText:='select * from Objects_tbl where groupid = '''+dsGetGroupID.Fields.Fields[0].AsString+'''';
        dsGetObjects.Active:=true;
        //Erstes Objekt wählen
        dsGetObjects.First;
        //Child erstellen - Solange wie Daten vorhanden sind
        for i2:=0 to dsGetObjects.RecordCount -1
        do begin
           with lvObjects.Items
           do begin
              AddChild(ListItem, dsGetObjects.Fields.Fields[2].AsString);
           end;
           //Nächstes Objekt wählen
           dsGetObjects.next;
        end;
        //Nächste Gruppe wählen
        dsGetGroupID.next;
     end;
end;
Gruß,
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#8

Re: Frage zur TreeView

  Alt 8. Sep 2004, 11:57
Nun hab ich mal weiter geproggt.. ich bin nun beim einfügen eines neuen Objektes angekommen. Wenn das Objekt eingefügt wurde, wollt ich die Liste neu laden lassen. Jedoch lädt er mir jetzt nur noch die Gruppen und nicht die dazugehörigen Objekte obwohl ich die selbe Prozedur (siehe oben) aufrufe. Kann mir da vielleicht jemand sagen, woran das liegt?

Gruß,
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

Re: Frage zur TreeView

  Alt 8. Sep 2004, 12:03
warum willst du denn den baum neu laden, wenn er schon vorhanden ist?
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#10

Re: Frage zur TreeView

  Alt 8. Sep 2004, 12:05
Zitat von ibp:
warum willst du denn den baum neu laden, wenn er schon vorhanden ist?
Weil ich ein neues Objekt in die Datenbank eingefügt habe und der Nutzer die Anwendung nicht neu starten soll, um die aktuellen Daten zu sehen!!
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:31 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