Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
TreeView: *alle* Nodes durchsuchen (Contains) und alle Treffer ausklappen
SeCuRiiTaS
myCSharp.de - Member



Dabei seit:
Beiträge: 117

Themenstarter:

TreeView: *alle* Nodes durchsuchen (Contains) und alle Treffer ausklappen

beantworten | zitieren | melden

Hallo zusammen,
gibt es eine Möglichkeit, meine gesamte TreeView, sprich alle Tree Nodes, zu durchsuchen auf einen Wert und die Anzahl der Treffer, wo das TreeNode den Suchbegriff beinhalten auszulesen?

Ich habe eine TreeView mit verschiedenen Root Nodes und ChildNoded und möchte gerne nach einem Suchbegriff alle aufklappen, wo es Treffer gibt sowie die Anzahl der Treffer ausgeben.

Irgendwelche Ideen? Kann man mit einer foreach Schleife durch die Nodes springen und den Namen abfragen?

Danke & Gruß
Mit freundlichen Grüßen,
SeCuRiiTaS
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5985
Herkunft: Leipzig

beantworten | zitieren | melden

Hi SeCuRiiTaS,

da es sich um eine Baumstruktur handelt, kannst du mit Rekursion arbeiten. Du mußt ja von allen Knoten die Kind-Knoten durchsuchen, und wiederum deren Kind-Knoten.

Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
deerhunter
myCSharp.de - Member



Dabei seit:
Beiträge: 92

beantworten | zitieren | melden

Zitat von SeCuRiiTaS
Irgendwelche Ideen? Kann man mit einer foreach Schleife durch die Nodes springen und den Namen abfragen?

Hi SeCuRiiTaS!

Die Arbeit wird dir leider nicht vom Framework abgenommen, ist aber ganz leicht umzusetzen. Schau dir einfach mal diesen Artikel zu Tree-Traversal-Algorithm an. Damit kannst du alle Knoten abfragen und deine Suche leicht implementieren.
private Nachricht | Beiträge des Benutzers
SeCuRiiTaS
myCSharp.de - Member



Dabei seit:
Beiträge: 117

Themenstarter:

beantworten | zitieren | melden

Danke für eure Antworten.
Habe ein Code Snippet für eine rekursive Suche gefunden und modifiziert. Er findet zumindest nun meine einzelnen Knoten, öffnet diese aber nicht.

private void PrintRecursive(TreeNode treeNode, string suche)
        {
            // Print the node.
            // Print each node recursively.
            foreach (TreeNode tn in treeNode.Nodes)
            {
                if (tn.Text.ToUpper().Contains(suche.ToUpper()))
                {
                    TreeNode parentNode = tn.Parent;
                    parentNode.Expand();
                    anzahlErgebnisseOrganigramm++;
                }
                PrintRecursive(tn, suche);
            }
        }

        // Call the procedure using the TreeView.
        private void CallRecursive(TreeView treeView, string suche)
        {
            // Print each node recursively.
            TreeNodeCollection nodes = treeView.Nodes;
            foreach (TreeNode n in nodes)
            {
                PrintRecursive(n, suche);
            }
        }

Was ist an

parentNode.Expand();
verkehrt?
Mit freundlichen Grüßen,
SeCuRiiTaS
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo SeCuRiiTaS,

ich gehe mal davon aus, dass du den ganzen Pfad aufklappen musst. Wenn der Parent eines Nodes aufgeklappt ist, aber dessen Parent nicht, dann sieht man auch nichts.

Das Ausklappen eines Pfades ist nun ganz einfach zu machen. Beachte daher [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore
private Nachricht | Beiträge des Benutzers
SeCuRiiTaS
myCSharp.de - Member



Dabei seit:
Beiträge: 117

Themenstarter:

beantworten | zitieren | melden

Ich hab den Fehler gefunden, hatte ein "CollapseAll()" am Ende verbaut ich Dussel. Klappt nun wunderbar, vielen Dank :)
Mit freundlichen Grüßen,
SeCuRiiTaS
private Nachricht | Beiträge des Benutzers