Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zwei Tabel als Baum Darstellen (https://www.delphipraxis.net/68642-zwei-tabel-als-baum-darstellen.html)

thklingler 5. Mai 2006 13:41

Re: Zwei Tabel als Baum Darstellen
 
Was deffinierst du als tvBaum?

marabu 5. Mai 2006 13:42

Re: Zwei Tabel als Baum Darstellen
 
tv ist oft die mnemonische Kennzeichnung des Variabletyps - hier TreeView.

marabu

thklingler 5. Mai 2006 14:01

Re: Zwei Tabel als Baum Darstellen
 
Danke hab es hinbekommen, dass ist jetzt aber keine Datenintensivekomponente wozu brauche ich die dann?

Das BeginUpdate und EndUpdate wird bei mir angemault tvBaum enthält kein element diese Typs.

Wie bekomme ich nun heraus welchen eintrag der User gewählt hat?

marabu 5. Mai 2006 16:01

Re: Zwei Tabel als Baum Darstellen
 
BeginUpdate() und EndUpdate() sind Methoden von TreeView.Items - also tvBaum.Items.BeginUpdate() und es wird funktionieren. Sobald du einen Knoten auswählst wird das Ereignis OnChange() gefeuert - du musst nur entsprechenden Code dafür schreiben. Beim Befüllen des Baums solltest du den Primärschlüssel der Tabelle in der Eigenschaft Data des Knoten mitführen:

Delphi-Quellcode:
tn0 := tvBaum.Items.AddChildObject(nil,
         Table1.FieldByName('FIRMA').Text,
         Pointer(Table1.FieldByName('ID').AsInteger)
       );
Jetzt kannst du im Ereignis OnChange() recht einfach unterscheiden:

Delphi-Quellcode:
procedure TDemoForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin
  case Node.Level of
    0: // Hersteller
      Table1.Locate('ID', Integer(Node.Data), []);
    1: //Produkt
      Table2.Locate('ID', Integer(Node.Data), []);
  end;
end;
Das ist ohne datensensitive Komponenten, wie du schon richtig bemerkt hast.

marabu

thklingler 5. Mai 2006 16:19

Re: Zwei Tabel als Baum Darstellen
 
Danke für die Hilfe läuft super,
aber wozu gibt es datenintensive Komponenten :?: wenn man die Lösung ohne macht ?

thklingler 5. Mai 2006 16:59

Re: Zwei Tabel als Baum Darstellen
 
Noch ein hoffentlich nicht so dumme Frage. Wie kann ich feststellen ob auf einen Root oder einen Child gecklickt wurde?
Da die Zeiger für die DB mitlaufen habe ich immer einen Bezeichner ausgwählt auch wenn der User nur auf einen Rootknoten gecklickt hat, ich zur weiter Verarbeitung aber einen ausgewählten Bezeichner brauche.

marabu 5. Mai 2006 17:18

Re: Zwei Tabel als Baum Darstellen
 
Die datensensitiven Komponenten gibt es seit D1. Durch die schematisierte Anwendung dieser Komponenten wird ein schnelles Erfolgserlebnis beim Erstkontakt sicher gestellt. Meine Sicht.

Der aktuelle Datensatz in der Tabelle kann ja ruhig beibehalten werden. Du schreibst von einem Root-Knoten - wieviele davon hast du und warum? Wenn ich auf Level 0 abfrage, dann gehe ich davon aus, dass alle Hersteller als Root-Knoten (auf der obersten Ebene) eingetragen wurden.

marabu

thklingler 5. Mai 2006 19:52

Re: Zwei Tabel als Baum Darstellen
 
Ich dachte die Hersteller sind die Rootkonten, wenn das Prog Fertig ist werden ca. 10-15 Hersteller in der DB sein.

Noch was anderes ist mir aufgefallen, das Onchange Ereigins wird nicht ausgeführt wenn man von einem Unterpunkt auf einen Aufgeklappten Unterpunkt eines anderen Kontens klickt.

Währe es nicht besser das mitfühere des Pointers in das Onclickereignis zulegen? Da dieses immer bei einer Änderung vorhanden ist.

marabu 5. Mai 2006 20:12

Re: Zwei Tabel als Baum Darstellen
 
Zitat:

Zitat von thklingler
Noch was anderes ist mir aufgefallen, das Onchange Ereigins wird nicht ausgeführt wenn man von einem Unterpunkt auf einen Aufgeklappten Unterpunkt eines anderen Kontens klickt.

Wenn das bei dir so ist, dann läuft da etwas schief.

Zitat:

Zitat von thklingler
Wäre es nicht besser das Mitführen des Pointers in das Onclick-Ereignis zulegen, da dieses immer bei einer Änderung vorhanden ist?

Nicht unbedingt, aber du solltest ruhig ein wenig damit experimentieren. Es gibt viele Stellen, die man in einer TreeView anklicken kann - und es gibt mehr als eine Maustaste. Das Ändern eines Knotens im Programm - ohne Mausklick - löst auch kein OnClick-Ereignis aus. Probiere einfach alles aus und mache dich mit der Komponente vertraut. Am Besten auch ohne Bezug zur Datenbank, sonst vermischst du unnötig zwei potentielle Problemfelder.

marabu

thklingler 8. Mai 2006 08:39

Re: Zwei Tabel als Baum Darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du hast recht, das Onchange wird ausgeführt nur die Db wird nicht aktuallisiert.

Ich habe folgendes geändert um das zu testen:

Delphi-Quellcode:
procedure TForm1.tvbaumChange(Sender: TObject; Node: TTreeNode);

begin
Showmessage('jetzt');
   case Node.Level of
    0: // Hersteller
      DataModule2.TdbTable1.Locate('Hersteller_ID', Integer(Node.Data), []);
    1: //Produkt
      DataModule2.TdbTable2.Locate('Pr_ID', Integer(Node.Data), []);
  end;
Label1.Caption:=DataModule2.TdbTable1.FieldValues['Firma'];
Label2.Caption:=DataModule2.TdbTable2.FieldValues['Bezeichung'];
Label3.Caption:=IntToStr(DataModule2.TdbTable2.FieldValues['maxl']);
Label4.Caption:=IntToStr(DataModule2.TdbTable2.FieldValues['Breite']);

end;
Das Showmessage wird immer ausgeführt, die DB(Labels) werde nicht aktuallisiert. Warum ?


Zip mit Datendateien angehängt

An bei noch das TestProg als Zip da könnt ihr das Verhalten selbst sehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
Seite 2 von 3     12 3      

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