Laden...

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

Letzter Beitrag vor 11 Jahren 6 Posts 3.187 Views
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

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

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.

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

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

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

Mit freundlichen Grüßen,
SeCuRiiTaS