C # TreeView реализация функции поиска - PullRequest
0 голосов
/ 08 октября 2019

В настоящее время я пытаюсь реализовать функцию поиска в небольшом проекте, который у меня есть. Небольшая предыстория о проекте, у меня есть XML, откуда я импортирую некоторые данные, хранящиеся в древовидной структуре. Моя цель - уметьчтобы дать строку и отобразить в виде дерева только те узлы, которые содержат эту конкретную строку.

Для приведенного ниже XML-кода мое древовидное представление выглядит следующим образом

 Breakfast
     Belgian waffles
     Strawberry Belgian Waffles 

Если я выберу узел, у меня будетгрупповое поле с некоторыми текстовыми полями, которое содержит свойства каждого элемента (цена, калорийность и т. д.)

Я хочу, чтобы моя функция могла искать что-либо ... то есть, если я даю цену, отображать элемент/ items в древовидной структуре с этой ценой, если я ищу вафли, чтобы отобразить все вафли.

<breakfast_menu>
  <food>
    <name>Belgian Waffles</name>
    <price>$5.95</price>
    <description>
      Two of our famous Belgian Waffles with plenty of real maple syrup
    </description>
    <calories>650</calories>
  </food>
  <food>
    <name>Strawberry Belgian Waffles</name>
    <price>$7.95</price>
    <description>
      Light Belgian waffles covered with strawberries and whipped cream
    </description>
    <calories>900</calories>
  </food>
</breakfast_menu>

У меня есть рекурсивная функция, но в 3-й строке (TreeNode t = treeNode.FirstNode) она выскакиваетисключение нулевой ссылки. Я предполагаю, что это исключение появляется, когда оно попадает на узел без дочерних элементов, но я не знаю, как его обработать.

private void IterateRecursive(TreeNode treeNode)
        {
            TreeNode t = treeNode.FirstNode;
            if (t!=null)
            {
                foreach (TreeNode tn in treeNode.Nodes)
                {
                    IterateRecursive(tn);
                }
            }
            if (!treeNode.Text.Contains(textBox_search_string.ToString()))
            {
                treeView1.Nodes.Remove(treeNode);
            }
        }

Кроме того, если есть разницаЯ могу сделать эту функцию поиска доступной для предложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...