#c# #treeview #refresh
#c# #просмотр дерева #обновить
Вопрос:
У меня есть Treeview, который пользователь не может редактировать. Способ, которым я пытаюсь обновить, — это очистить все дерево и повторно добавить все узлы (и дочерние элементы). Я добиваюсь этого с помощью следующих строк кода:
treeView.BeginUpdate(); //Freeze drawing
treeView.Nodes.Clear(); //Empty Tree
addAllNodes(); //This adds the nodes for the tree and sets their name/text property
treeView.EndUpdate(); //Unfreeze drawing
Я пытался добавить метод Update и Refresh перед вызовом addAllNodes, но это ничего не изменило. Выполнение вышеуказанного приводит к ошибке:
Система.Исключение ArgumentException: не удается добавить или вставить элемент ‘NodeNameHere’ более чем в одно место. Сначала вы должны удалить его из текущего местоположения или клонировать
Мой первый вопрос заключается в том, что я делаю, чтобы вызвать эту ошибку, и как я могу правильно обновить свое дерево?
Мой второй вопрос заключается в том, могу ли я каким-либо образом восстановить расширенные узлы пользователя после обновления? (чтобы все в конечном итоге не рухнуло)
Комментарии:
1. Что касается второго вопроса, то для этого я сделал следующее: перед очисткой моего древовидного представления я перебираю узлы, и если узел расширен, я добавляю этот узел в список. Затем очистите и добавьте узлы обратно и выполните цикл по моему списку, расширяя узлы, которые есть в списке.
2. Я подходил к этому неправильно. Я пошел дальше и удалил только дочерние элементы, которые нуждались в обновлении. Любые статические узлы (добавленные из addAllNodes (), которые никогда не требовалось трогать). Все еще хотелось бы иметь способ запоминания всех развернутых узлов.
3. @John Arlen — Да, я просматривал строку отладки за раз, и дерево очищалось.
Ответ №1:
у каждого узла есть путь (называемый чем-то вроде .Path или .FullPath; прямо сейчас VS не открыт). Таким образом, вы можете обойти свои узлы перед их очисткой и записать все расширенные узлы, затем снова обойти их после обновления и посмотреть, совпадает ли путь узла с сохраненным. если это так, разверните его.