Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Nodes von Datenbank in TreeView einlesen (https://www.delphipraxis.net/51313-nodes-von-datenbank-treeview-einlesen.html)

fruity 10. Aug 2005 08:55

Datenbank: SQL • Zugriff über: ADO

Nodes von Datenbank in TreeView einlesen
 
Morgen,

Der Tag ist noch so jung und schon hab ich mein erstes Problem.

Ich hab in einer Datenbank Daten wie zB. C, C++, Delphi zugewiesen. Ebenfalls hab ich noch Daten wie Grafik, System, etc. Diese werden anhand einer ParentID der Programmiersprache zugewiesen.

Jetzt moechte ich das ganze in einem TreeView ausgeben.

Dazu habe ich schon mal die Procedure welche mir den TreeView erstellt. Nur leider eben nur die HauptKnoten und keine Unterknoten. Diese werden einfach nur an den Treeview rangehaengt. Ich moechte aber, dass sie gleich der richtigen Node zugeordnet werden.

Hab schon Tante Google und die Suchfunktion des Forums danach gefragt nur leider kein passendes Thema dazugefunden.


Danke schonmal fuer eure Hilfe . . .

jensw_2000 10. Aug 2005 09:19

Re: Nodes von Datenbank in TreeView einlesen
 
So geht das nicht.
Mit den Eckdaten können wir nen Rätselstündchen machen, aber nicht effektiv helfen ... :roll:

- Wie liegen die Daten in der DB vor (Tabellenstruktur) ?
- Wie und womit rufst du die Daten aus der DB ab (ggf. Feld-Struktur des Result-Datasets) ?
- Wie liest du derzeit die abgerufenen Daten in den Treeview ein (Codesnipsel)?

Gib uns mal Input dann finden wir auch eine Lösung :mrgreen:


Schöne Grüße,
Jens
:hi:

fruity 10. Aug 2005 09:30

Re: Nodes von Datenbank in TreeView einlesen
 
Hallo Jens,

Ich als, noch Gruenling, wusste nicht was ich euch alles an Daten geben soll.
Danke schonmal fuer deine schnelle Hilfe

1.) Struktur:
Code:
 
ID  ParentID  Bezeichnung
1       -1         C
2       -1         C++
3       -1         Delphi
4        1         Grafik
5        1         System
6        2         Grafik
7        2         System
8        3         Grafik
9        3         System
10       1         Drucken
[Edit] Dies kann ueber mehrere Ebenen gehen und bekommt den bezug zur "ueber" Ebene durch die ParentID [/Edit]

2.) Aufgerufen werden die Daten ueber ein ADOQuery

3.)

Delphi-Quellcode:
procedure TFmHaupt.FillTreeView(TheView: TTreeView; TheData: TDataSet);

procedure MoveToParentNode(TheNode: TTreeNode);
    var x : Integer;
    begin
      for x := 0 to TreeView1.Items.Count-1 do begin
        if Assigned(TreeView1.Items[x].Data) then begin
          if PView(TreeView1.Items[x].Data).ID = PView(TheNode.Data).ParentID then begin
            TheNode.MoveTo(TreeView1.Items[x], naAddChild);
            Break;
          end;
        end;
      end;
    end;

var Root,AktNode : TTreeNode;
  i : Integer;
begin
  DMHaupt.QHauptTreeView.First;
  Root := TTreeNode.Create(TreeView1.Items);
  Root.Text := 'Demo';
  Root.Data := nil;

  for i := 0 to DMHaupt.QHauptTreeView.RecordCount -1 do
    begin
      AktNode := TTreeNode.Create(TreeView1.Items);
      AktNode.Data := new(PView);
      PView(AktNode.Data).ID      := DMHaupt.QHauptTreeView.FieldByName('ID').AsInteger;
      PView(AktNode.Data).ParentID := DMHaupt.QHauptTreeView.FieldByName('ParentID').AsInteger;
      PView(AktNode.Data).Bezeichnung := DMHaupt.QHauptTreeView.FieldByName('Bezeichnung').AsString;
      DMHaupt.QHauptTreeView.Next;

      TreeView1.Items.Add(AktNode, PView(AktNode.Data).Bezeichnung);
    end;

  for i := 0 to TreeView1.Items.Count -1 do begin
    if Assigned(TreeView1.Items[i].Data) then begin
      if PView(TreeView1.Items[i].Data).ParentID <> 0 then MoveToParentNode(TreeView1.Items[i]);
    end;
  end;
end;

jensw_2000 10. Aug 2005 10:21

Re: Nodes von Datenbank in TreeView einlesen
 
Fertig ... :mrgreen:

Delphi-Quellcode:
 
While NOT DMHaupt.QHauptTreeView.eof do // << ist schöner :-)
    begin
      AktNode := TTreeNode.Create(TreeView1.Items);
      AktNode.Data := new(PView);
      PView(AktNode.Data).ID      := DMHaupt.QHauptTreeView.FieldByName('ID').AsInteger;
      PView(AktNode.Data).ParentID := DMHaupt.QHauptTreeView.FieldByName('ParentID').AsInteger;
      PView(AktNode.Data).Bezeichnung := DMHaupt.QHauptTreeView.FieldByName('Bezeichnung').AsString;
      DMHaupt.QHauptTreeView.Next;

      // Das weg ....
      TreeView1.Items.Add(AktNode, PView(AktNode.Data).Bezeichnung);
      // und das verwenden ...
      WITH TheView.Items.Add(AktNode, PView(AktNode.Data).Bezeichnung) do
        Data:=AktNode.Data;
    end;
Habs im Debugmode gefunden.
In der Schleife "for i := 0 to TreeView1.Items.Count -1" war Items[i].Data immer 0.

Viel Spass,

Jens

:hi:

fruity 10. Aug 2005 10:30

Re: Nodes von Datenbank in TreeView einlesen
 
Danke vielmals :thumb:

Haette bei mir noch viel Kopfweh verursacht. :)

Euch jetzt schonmal nen schoenen Mittag und guten Appetit wuenschen tu


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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