![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Tiberian |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 26.2.2008 Репутация: нет Всего: нет |
Если загружать из бд весь список объектов, которыми заполняется treeview, за раз, на это может уйти очень много времени при большом его объёме. Может, кто знает паттерны, как организовать динамическую подгрузку данных в привязке к treeview?
|
|||
|
||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 5 Всего: 38 |
Очень хороший способ я как то увидел в книжке Петцольда по WinForms, он заключается в следующем:
Если принять корень дерева за 1 уровень, то сначала загружаем все данные в 1 и 2 уровни (корень и его подкаталоги). При открытии корня загружаем подкаталоги его подкаталогов(3 уровень) При открытии какого - нибудь каталога 2 уровня, загружаем подкаталоги его подкаталогов(4 уровень) и т.д., тем самым при нажатии кнопки раскрытия каталога наша прога не будет думать по полчаса, отображая его подкаталоги, так как данные уже загружены и список быстро раскроется, а пока пользователь смотрит его, подгружается более глубокий уровень, не вызывая у пользователя желания разбить клавиатуру об монитор) Например: root --item1 --item11 --item111 --item12 --item2 --item21 --item212 --item22 --item221 --item222 --item3 Сначала грузятся: root, item1, item2, item3 Далее нажимаем на root - грузятся: item11, item12, item21, item22 Далее нажимаем, например, на item2 - грузятся: item212, item221, item222. Если бы нажали на item1, а не на item2 то загрузился бы только item111. Тем самым в процессе работы с деревом будут загружаться не все данные, а только те, которые нужны пользователю. (Если конечно он не раскроет все узлы...) Это сообщение отредактировал(а) KelTron - 26.2.2009, 20:04 -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
avosi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
а че сложного поставь условие что инициализируются только те узлы уровень вложений которых по отношению к корню =2
|
|||
|
||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 5 Всего: 38 |
Предлагаешь загружать только 2 уровень?) Тут же нужна динамическая подгрузка.
Или ты предлагаешь грузить все узлы на 2 уровня ниже чем текущий? Тогда будут грузиться лишние данные. В приведённом выше способе грузятся только элементы выбранного поддерева. -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Самое простое решение - в обработчике события Collapsed считывать Id элемента (хранить можно, например, в Tag) - и делать запрос в базу
KelTron предложил очень интересный паттерн. И в некоторый случаях реализовать лучше именно его (хотя реализация будет немного сложнее). Это сообщение отредактировал(а) Idsa - 25.3.2009, 06:32 |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 1 Всего: 59 |
На мой взгляд, этот вариант конечно же сокращает время подзагрузки, но тем не менее грузит избыточные данные. Если пользователь захочет выбрать элемент первого уровня, то он откроет корень и загрузятся все уровни "2" элементов уровня "1", хотя реально (возможно), пользователю и не потребуется открывать ни один из них. Думаю именно поэтому, мелкософты и большинство остальных компаний выбирают обычный алгортитм, когда грузится открываемая ветка и пользователь видит "Идет загрузка...". ИМХО, все части кода не оптимизируешь и пользователь все равно будет видеть такую надпись при выполнении других "долгих" частей программы...
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
sameness |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
кто нибудь знает, как декларативно сделать привязку иерархических данных связанных по ключу к TreeView Silverlight?
|
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 1 Всего: 59 |
Я знаю, но тут отвечать не буду... вы разделом ошиблись. Идите в раздел WPF Silverlight и напишите там, только сразу пишите подробнее.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |