Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TreeView aus DB füllen (https://www.delphipraxis.net/70879-treeview-aus-db-fuellen.html)

Christian18 6. Jun 2006 09:57


TreeView aus DB füllen
 
Hallo,

ich habe mal eine Frage zu TreeViews. Wie kann ich das ding mit Daten aus meiner DB befüllen. Oder erstmal wie kann ich es überhaupt befüllen. Ich habe in meiner DB drei Tabellen. Über die Mastersource sind diese miteinander verbunden.

MFG Christian18

mkinzler 6. Jun 2006 10:09

Re: TreeView aus DB füllen
 
Zitat:

Oder erstmal wie kann ich es überhaupt befüllen.
Delphi-Quellcode:
TreeView.Items.Add<xxx>;
Wie willst du die Daten der 3 Tabellen anzeigen?

U.U. wäre ein DBtreeView hilfreich.

Christian18 6. Jun 2006 10:23

Re: TreeView aus DB füllen
 
Ja die Daten will ich anzeiegn. Und da die einzelnen Tabellen mit der Mastsresource vcerbunden sind. ist ein treeview richtig gut geeignet.

MFG Christian18

mkinzler 6. Jun 2006 10:45

Re: TreeView aus DB füllen
 
Meine Frage zielte daruf ab wie die die Daten in dem Treeview dargestellt werden sollen. Z.B. Erste Ebene aus tabelle ein, 2.Ebene aus Tabelle2 u.s.w.

Schau dir mal den VirtualTreeView an.

Christian18 6. Jun 2006 11:40

Re: TreeView aus DB füllen
 
Ja genau so meine ich das. 1. Tabelle erste ebene usw.

Wo kann ich den Virtuellen Treeview finden.

MFG Christian18

aschne1 6. Jun 2006 11:42

Re: TreeView aus DB füllen
 
Hi

Nimm lieber VST wenn es viele Datensätze (ab 1000) sind, denn TTreeview ist sehr langsam.

Edit: Alle Tabelle mit einer Schleife durchlaufen und die Werte einzeln zuweisen.

Gruss

mkinzler 6. Jun 2006 11:46

Re: TreeView aus DB füllen
 
Zitat:

Wo kann ich den Virtuellen Treeview finden.
VST-Homepage

Christian18 6. Jun 2006 11:51

Re: TreeView aus DB füllen
 
Hallo,

ich will trotzdem erstmal mit TTreeView arbeiten. Wie kann ich das ding denn jetzt mit Daten füllen?!?!?

MFG Christian18

mkinzler 6. Jun 2006 11:59

Re: TreeView aus DB füllen
 
Bei den Downloads gibt es auch diese Demo

Christian18 6. Jun 2006 12:00

Re: TreeView aus DB füllen
 
Also ich habe schon mal angefangen.

ich würde es so machen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Table1.First;
  while not Table1.Eof do
    begin
      while not Table2.Eof do
        begin
          while not Table3.Eof do
            begin
              Table3.Next;
            end;
          Table2.Next;
        end;
      Table1.Next;
    end;
end;
Und jetzt weiß ich bloß nicht weiter. Ich weiß jetzt nicht wie ich den ersten Knoten mache. dann die unterknoten und zu den unterknoten dann die einträge. wie kann ich das machen???

MFG Christian18

aschne1 6. Jun 2006 12:09

Re: TreeView aus DB füllen
 
Delphi-Quellcode:
DeineQuery.First
while not DeineQuery.Eof do                                         // Alle Datensätze durchlaufen
begin
  TreeView1.Items.AddChild(nil,DeineQuery.FieldByName('Feldname').AsString);
  Next;
end;
Fügt Rooteinträge hinzu, für Untereinträge weitere Schleifen...

Gruss

Christian18 6. Jun 2006 12:25

Re: TreeView aus DB füllen
 
Ok,

das funktioniert erst einmal. Und wie kann ich jetzt die ersten Untereinträger aus der zweiten Tabelle machen???

Hier mein code:

Delphi-Quellcode:
procedure TFMain.Button1Click(Sender: TObject);
begin
  Gauge1.MinValue:=1;
  Gauge1.MaxValue:=Table1.RecordCount;
  while not Table1.Eof do
    begin
      TreeView1.Items.AddChild(nil, Table1.FieldByName('Feldname').AsString);
      while not
      Table1.Next;
      Gauge1.Progress:=Gauge1.Progress + 1;
    end;
end;
MFG Christian18

mkinzler 6. Jun 2006 12:45

Re: TreeView aus DB füllen
 
In dem du AddChild auf auf den Knoten anwendest, welchem du einen Unterknoten zuordnen willst.

Delphi-Quellcode:
procedure TFMain.Button1Click(Sender: TObject);
var
    node: TTreeNode;
begin
  Gauge1.MinValue:=1;
  Gauge1.MaxValue:=Table1.RecordCount;
  while not Table1.Eof do
    begin
      node:= TreeView1.Items.AddChild(nil, Table1.FieldByName('Feldname').AsString);
      while not Table2.Eof do
      begin
          TreeView1.Items.AddChild(node, Table2.FieldByName('Feldname').AsString);
          Table2.Next;
      end;
      Table1.Next;
      Gauge1.Progress:=Gauge1.Progress + 1;
    end;
end;
[Edit: DelphiTags vergessen]

marabu 6. Jun 2006 12:51

Re: TreeView aus DB füllen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Christian,

als erstes solltest du deine DataSets über die Eigenschaft MasterSource (TTable) bzw. DataSource (TQuery) hierarchisch verketten. Das Eintragen von Knoten auf beliebiger Ebene lässt sich folgendermaßen abstrahieren:

Delphi-Quellcode:
procedure AddNodes(nodes: TTreeNodes; nParent: TTreeNode; ds: TDataSet; fnDisplay, fnKey: String);
var
  iKey: Integer;
  sDisplay: String;
begin
  nodes.BeginUpdate;
  with ds do
  try
    First;
    while not Eof do
    begin
      sDisplay := FieldByName(fnDisplay).AsString;
      iKey := FieldByName(fnKey).AsInteger;
      with nodes.AddChildObject(nParent, sDisplay, Pointer(iKey)) do
        HasChildren := True;
      Next;
    end;
  finally
    nodes.EndUpdate;
  end;
end;
Die Initialisierung der TreeView kann im Ereignis OnCreate() der Form statt finden:

Delphi-Quellcode:
procedure TDemoForm.FormCreate(Sender: TObject);
begin
  AddNodes(TreeView.Items, nil, QC, 'Company', 'CustNo');
end;
Wie du die Knoten auf den unteren Ebenen über das Ereignis OnExpanding() der TreeView eintragen lassen kannst, das zeigt die angehängte Demo.

Grüße vom marabu


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