AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Treeview bestimmten Node finden

Ein Thema von R2009 · begonnen am 26. Nov 2009 · letzter Beitrag vom 26. Nov 2009
Antwort Antwort
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#1

Treeview bestimmten Node finden

  Alt 26. Nov 2009, 07:43
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:
    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
Grüsse
rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Treeview bestimmten Node finden

  Alt 26. Nov 2009, 07:56
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Treeview bestimmten Node finden

  Alt 26. Nov 2009, 08:06
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:
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;
Grüsse
rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Treeview bestimmten Node finden

  Alt 26. Nov 2009, 08:37
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:

...

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;

...
Edith sagt:

Noch hier vll. als kleine Hilfe bzw Lösung http://delphi.about.com/od/vclusing/l/aa010703a.htm


MfG Alaitoc
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 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