Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Treeview Node finden (https://www.delphipraxis.net/99245-treeview-node-finden.html)

Gehstock 9. Sep 2007 09:39

Datenbank: Access • Zugriff über: ADO

Treeview Node finden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TfrmMain.TreeView1Click(Sender: TObject);
begin
  Memo1.Clear;
  ADOQuery1.SQL.Clear;
  ADOQuery1.Close;
  ADOQuery1.SQL.Text := 'SELECT * FROM ' + TreeView1.{****}
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    if ADOQuery1.FieldByName('Feld1').AsString = TreeView1.Selected.Text then
    begin
      Memo1.Lines.Add(ADOQuery1.FieldValues['Feld2']);
    end;
    ADOQuery1.Next;
  end;
end;
ick komme hier nicht weiter wie sage ich den Treeview an der markierten stelle in welchen Node er sich befindet um die passende Tabelle in der DB zu durchsuchen

als demo hab ichs so gemacht

Delphi-Quellcode:
ADOQuery1.SQL.Text := 'SELECT * FROM Funktionen' ;
so klappt es auch aber halt nur für diesen Node

Ghostwalker 9. Sep 2007 09:56

Re: Treeview Node finden
 
Du must vor der DB-Abfrage erstmal den Node rausfinden, der selektiert ist. Über eine rekursive Suche mit Hilfe der selected-Eigenschaft geht das ungefähr so:

Delphi-Quellcode:

function SearchNode(Aroot:TTreenode):TTreenode;
var
  i : integer;

begin
  result := NIL;
  for i := 0 to Aroot.childcount -1 do
  begin
    node := Aroot.Childnodes[i];
    if TreeView1.selected[node] then
    begin
      result := node;
      break;
    end
    else
    begin
      if (node.childcount > 0) then
         result := SearchNode(node);
      if result <> NIL then exit;
    end;
  end;
end;
Das ganze ist jetzt frei aus dem Gedächtnis gebaut und wird so 1:1 nicht funktionieren, sollte aber das Prinzip verdeutlichen.

Danach hast du den Node und kannst mit Hilfe des Textes die DB-Abfrage machen :)

marabu 9. Sep 2007 10:15

Re: Treeview Node finden
 
Hallo,

der selektierte Knoten muss nicht unbedingt gesucht werden:

Delphi-Quellcode:
function RootNode(node: TTReeNode): TTreeNode;
begin
  while Assigned(node) do
  begin
    Result := node;
    node := node.Parent;
  end;
end;

procedure TDataForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin
  if Assigned(Node) then
    ShowMessage(RootNode(Node).Text)
end;
Ich habe OnChange() genommen, aber unter bestimmten Randbedingungen funktioniert es auch mit OnClick().

Grüße vom marabu

Gehstock 9. Sep 2007 10:23

Re: Treeview Node finden
 
Danke klappt Prima


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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 by Thomas Breitkreuz