Как добавить узлы через Backgroundworker в TreeView из базы данных и перезагрузить дочерние узлы при развертывании узла в Windows Forms C #? - PullRequest
0 голосов
/ 09 июня 2011

У меня есть база данных Nhibernate, которая предоставляет данные в виде иерархического списка <>.У меня есть TreeView в моем графическом интерфейсе Windows Forms и Backgroundworker, который заполняет TreeView всеми корневыми узлами и их дочерними элементами (ничего более из-за исключения отложенной загрузки из NHibernate, но это нормально, потому что я ожидаю, что у пользователя будет много узлов в TreeView).

Процесс добавления корневых узлов и их дочерних элементов в TreeView работает довольно хорошо, но когда я щелкаю узел, чтобы развернуть его, все дочерние элементы должны быть загружены из базы данных и добавлены в TreeView.Узлы успешно запрашиваются из базы данных и сохраняются в списке буферов (когда щелкните узел, чтобы развернуть его).

После этого я попробовал несколько идей, таких как перестройка TreeView и переполнение его полностью, но с этим решением у меня возникла проблема, что все развернутые узлы свернуты, поэтому я попытался сохранить развернутый узел, и он работал.Но я не совсем доволен этим решением, у меня сложилось впечатление, что это можно сделать проще, потому что я не хочу повторно заполнять TreeView каждый раз, когда пользователь расширяет узел.

Как я могу перезагрузитьПотомки TreeNode из базы данных и отображают его в TreeView без повторного заполнения всего TreeView?

1 Ответ

0 голосов
/ 09 июня 2011

Этот вопрос SO должен помочь с отложенной загрузкой.

Он использует пул потоков вместо фонового работника, в котором вы можете найти аргументы за / против в Google, но, на мой взгляд, неплохой выбор использовать пул потоков в Winforms.

Используя приведенный выше пост, передайте развернутый узел работнику. Когда у вас есть данные, необходимые для заполнения узла, используйте стандартную If ##. InvokeRequired Pattern , чтобы выполнить фактическую работу на узле.

Надеюсь, это поможет.

...