Laden...

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

Erstellt von SeCuRiiTaS vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.083 Views
S
SeCuRiiTaS Themenstarter:in
108 Beiträge seit 2012
vor 11 Jahren
TreeView: *alle* Nodes durchsuchen (Contains) und alle Treffer ausklappen

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

5.657 Beiträge seit 2006
vor 11 Jahren

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

D
91 Beiträge seit 2005
vor 11 Jahren

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.

S
SeCuRiiTaS Themenstarter:in
108 Beiträge seit 2012
vor 11 Jahren

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

49.485 Beiträge seit 2005
vor 11 Jahren

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

S
SeCuRiiTaS Themenstarter:in
108 Beiträge seit 2012
vor 11 Jahren

Ich hab den Fehler gefunden, hatte ein "CollapseAll()" am Ende verbaut ich Dussel. Klappt nun wunderbar, vielen Dank 😃

Mit freundlichen Grüßen,
SeCuRiiTaS