![]() |
Datenbank: Access • Version: 2000 • Zugriff über: ADO
Durch klick auf TTreeView in Tabelle DS Positionieren
Hallo,
ich habe eine DB in der ich zwei Tabellen habe. Die Informationen, die in der Tabelle enthalten sind, importiere ich mit folgender Routine in meiner TreeView Komponente.
Delphi-Quellcode:
Ich verwende diese Komponente, um eine hierarchische Darstellung meiner Tabelleninhalte zu erreichen. Das funktioniert auch problemlos. Es sieht auch richtig toll aus. Aber eine Funktionalität müsste ich jetzt noch haben. Wenn ich einen Knoten auswähle, durch einen Mouseklick, dann soll der Focus auch in der Tabelle auf diesen Datensatz gesetzt werden. Wie kann ich das tun? WICHTIG!!! Hierbei ist noch wichtig, wenn ich einen Knotenpunkt einmal anklicke, dann soll der Focus in der Master Tabelle auf den Datensatz gesetzt werden und wenn ich einen Knoten öffne, dann soll der Focus in der Detail Tabelle auf den ersten Datensatz gesetzt werden. Wenn ich einen Knoten offen habe, und ich einen Datensatz in einem Unterknoten auswähle, dann soll auch in der Detail tabelle der Focus in der Detail Tabelle aus diesen Datensatz Positioniert werden.
procedure TProgramm.FillTree(b : TTreeView; t1, t2 : TADOTable);
var n : TTreeNode; i1, i2 : Integer; begin b.Items.Clear; i1:=t1.RecNo; i2:=t2.RecNo; t1.First; while not t1.Eof do begin n:=b.Items.AddChild(nil, t1.FieldByName('Feldname1').AsString); t2.First; while not t2.Eof do begin b.Items.AddChild(n, t2.FieldByName('Feldname2').AsString); t2.Next; end; t1.Next; end; t1.RecNo:=i1; t2.RecNo:=i2; end; Über Lösungsansätze würde ich mich sehr freuen. Ich hoffe ich konnte mein doch etwas umfangreicheres Problem ein bisschen nahelegen. Mit freundlichen Grüßen Christian18 |
Re: Durch klick auf TTreeView in Tabelle DS Positionieren
Hallo Christian,
vieles wird leichter, wenn du den Primärschlüssel (Annahme PK, Typ INTEGER) mitführst:
Delphi-Quellcode:
Dann kannst du über die Ereignisse der TreeView die Positionierung in den DataSets vornehmen.
while not t1.Eof do
begin n := b.Items.AddChildObject(nil, t1.FieldByName('Feldname1').AsString, Pointer(t1.FieldByName('PK').AsInteger) ); t2.First; while not t2.Eof do begin b.Items.AddChild(n, t2.FieldByName('Feldname2').AsString, Pointer(t2.FieldByName('PK').AsInteger) ); t2.Next; end; t1.Next; end; Grüße vom marabu |
Re: Durch klick auf TTreeView in Tabelle DS Positionieren
Hallo,
erst einmal vielen dank für die schnelle antwort und für den Tip. Ich habe mir deinen Tip zu herzen genommen und dies entsprechend in meinem Quelltext geändert. Trotzdem habe ich noch ein kleines Problem. Wie kann ich nun die Position ermittln und dann den Focus auf den Datensatz setzen??? MFG Christian18 |
Re: Durch klick auf TTreeView in Tabelle DS Positionieren
|
Re: Durch klick auf TTreeView in Tabelle DS Positionieren
und wie komme ich wieder auf den Pointer raus den ich beim erzeugen setze???
EDIT: Hat jemand vieleicht auch ein paar Code schnipsel??? |
Re: Durch klick auf TTreeView in Tabelle DS Positionieren
Zitat:
Zitat:
Delphi-Quellcode:
Dann mußt du in dem Gerüst natürlich noch deine Fokus-Wechsel und was du sonst noch so machen willst unterbringen.
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var iKeyValue: integer; begin if Assigned(Node.Data) then begin iKeyValue := LongInt(Node.Data); if (Node.Level = 1) then //gehört zu t1 t1.Locate('FeldNamePKt1',iKeyValue,[]) else if (Node.Level = 2) then //gehört zu t2 t2.Locate('FeldNamePKt2',iKeyValue,[]); end; end; peinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz