![]() |
Treeview bestimmten Node finden
Hi DP'ler,
ich will aus einer Datenbank heraus einen Treeview füllen. Funktioniert auch alles wunderbar, bis ich doppelte Einträge (oder doppelte Pfade) habe. Ich habe eine Prozedur geschrieben mit der ich doppelte Einträge finden kann. Mein Problem ist, dass wenn es den Eintrag schon gibt er auf den Node wechseln muss. Ich hab mir die Finger wund gesucht aber nichts gefunden!
Delphi-Quellcode:
Grüsse
test:=check_double_entry(TreeView1.items,s.Strings[n]);
if test=false then j:=TreeView1.Items.AddChild(j,s.Strings[n]) else .... hier müsste er auf den Node wechseln den es ja schon gibt rainer |
Re: Treeview bestimmten Node finden
willst du doppelte Einträge vermeiden oder nur finden? Wenn du sie vermeiden willst würde ich bereits bei der Datenbankabfrage dafür sorgen das keine Einträge zurück gegeben werden mit gleichem Pfad. Ansonsten heißt es Node für Node durchzugehen und zu schauen ob der Inhalt dem gesuchten entspricht.
|
Re: Treeview bestimmten Node finden
Hi,
auf der Datenbankseite kann ich das nicht ändern. Der komplette Pfad liegt als test1>test2>test3 usw in einem String vor. Mein Problem besteht nur darin zu dem Knoten zu kommen der bereits vorhanden ist.
Delphi-Quellcode:
Grüsse
var s:tstringlist;j:TTreeNode;n:integer;test:boolean;
begin ADOQuery1.open; ADOQuery1.first; while not (ADOQuery1.eof) do begin s:=tstringlist.create; separate(s,ADOQuery1.FindField('Steuerfeld').asstring,'>'); //s enthält die Strings die in Steuerfeld, getrennt durch > abgelgt waren test:=IstDoppelt(TreeView1.items,s.Strings[0]); TreeView1.Items.BeginUpdate; if test=false then j:=TreeView1.Items.AddChild(nil,s.Strings[0]) else hier ist mein Problem. Hier muss j dem Knoten zugewiesen werden der schon vorhanden ist. TreeView1.Items.EndUpdate; for N:=1 to s.Count-1 do Begin test:=IstDoppelt(TreeView1.items,s.Strings[n]); if test=false then j:=TreeView1.Items.AddChild(j,s.Strings[n]) else hier ist mein Problem. Hier muss j dem Knoten zugewiesen werden der schon vorhanden ist. end; s.Clear; ADOQuery1.next; end; s.free; rainer |
Re: Treeview bestimmten Node finden
Wieso überprüfst du denn mit deiner Funktion ob der Knoten doppelt ist?
Lass dir doch lieber den Knoten zurückgeben und überprüfe dann ob der Knoten halt Assigned ist, also so in etwa:
Delphi-Quellcode:
Edith sagt:... var s:tstringlist;j:TTreeNode;n:integer; begin ADOQuery1.open; ADOQuery1.first; while not (ADOQuery1.eof) do begin s:=tstringlist.create; separate(s,ADOQuery1.FindField('Steuerfeld').asstring,'>'); j:=SearchNodebyString(TreeView1.items,s.Strings[0]); TreeView1.Items.BeginUpdate; if not Assigned (j) then begin j:=TreeView1.Items.AddChild(nil,s.Strings[0]) end else begin // Knoten schon vorhanden end; TreeView1.Items.EndUpdate; for N:=1 to s.Count-1 do Begin j:=SearchNodebyString(TreeView1.items,s.Strings[n]); if not Assigned (j) then begin j:=TreeView1.Items.AddChild(j,s.Strings[n]) end else begin // Knoten schon vorhanden end; end; s.Clear; ADOQuery1.next; end; s.free; ... Noch hier vll. als kleine Hilfe bzw Lösung ![]() MfG Alaitoc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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