2009-05-07 5 views
1

Я в ситуации, когда мне нужно отобразить дерево. Однако некоторые узлы имеют 35000 дочерних узлов (прямые дочерние элементы!). Это, конечно, способ замедлить с точки зрения удобства использования.Treeview с загрузкой по требованию большого количества узлов на одном уровне

Я предпочел бы видеть, что дерево загружает только те узлы, которые видны в окне просмотра браузера.

Такие деревья существуют для WinForms и C++, знает ли кто-нибудь из вас, существует ли такое дерево для ASP.NET?

В настоящее время мы используем Telerik Treeview, что является прекрасным контролем, но не поддерживает описанную ситуацию.

дополнительные вопросы

С точки зрения удобства использования: как вы имеете дело с такими деревьями. Отображение 35000 узлов на одном уровне приятно, но как вы находите что-то в этом дереве? Используете ли вы пейджинг в дереве? или окно поиска? или, возможно, добавить дополнительные уровни?

ответ

2

С учетом того, что многие узлы, даже если вы можете найти эффективный способ их отображения, скорее всего, не будут использоваться пользователями. Представьте, что вы пытаетесь прокручивать 35 000 узлов, чтобы найти нужный вам узел! То же самое касается пейджинга. Действительно ли пользователь перешел на страницы 3500 (при условии, что размер страницы равен 10), чтобы найти свою цель? Наверное, нет, и если они это сделают, они, вероятно, не будут слишком счастливы. :)

Вместо этого с большими наборами данных, как это, я считаю, что лучше всего обеспечить некоторый тип пользовательского интерфейса «Фильтр». Что-то, что позволяет вашему пользователю «формировать» доступные данные в более управляемую коллекцию.

Я не уверен, что у вас есть возможность обеспечить фильтрацию (то есть какие поля вы можете фильтровать), но я думаю, что это ваш лучший выбор. Варианты пользовательского интерфейса являются:.

  1. Что-то вроде RadGrid для ASP.NET AJAX, которая может обеспечить встроенный фильтрации интерфейс, который позволяет пользователям быстро находить значения они заинтересованы в
  2. Использование клиента в RadTreeView в API-интерфейс и поддержку загрузки по требованию узлов, вы можете создать текстовое поле, которое будет фильтровать узлы в дереве по мере того, как пользователь будет набирать. Вы просто обрабатываете событие onkeyup TextBox, а затем запускаете запрос к веб-службе, чтобы захватить узлы, соответствующие критериям фильтра, и замените коллекцию узлов TreeView на результат.Это сделает намного полезнее, чтобы ваши пользователи могли найти свой целевой узел.

Очевидно, что есть и другие подходы, но, надеюсь, это дает вам некоторые идеи.

Краткий ответ: Для больших наборов данных я бы использовал комбинацию фильтрации в реальном времени и веб-сервисов, чтобы представить более управляемый набор результатов для моих пользователей. Для начальной загрузки я загружал только первые (допустим) 200 узлов, чтобы поддерживать высокую производительность.

Надеюсь, это поможет! -Todd

1

Я знаю, что есть некоторые элементы управления деревьями с jQuery. Не знаю названия с рук. Управление деревом ASP.NET определенно не поддерживает это, поскольку оно не AJAXifiable. Для отображения 35000 узлов проблема, я бы страницы их, как это.

node 
| 
-- Sub Node 1 
| 
-- ... 
| 
-- Sub Node n 
| 
-- more... 

Когда вы наведите указатель мыши на большее или щелкните по нему, он получит больше узлов. Если вы показываете 100 вспомогательных узлов, я бы загрузил 200 и спрятал другие 100. Таким образом, когда вы наводите больше на более, оно появляется intantaneous. И каждый раз, когда вы наводите больше внимания, загружаются следующие скрытые 100.

Также не так сложно создать пользовательские элементы управления деревом в настоящее время со всеми браузерами уровня, используя <ul> и <li>, вложенные для создания узлов и узлов, а затем примените соответствующий стиль. <li> может иметь ссылки в них, если вы хотите, чтобы весь щелчок стал проще.

Мои два цента.