Treeview с загрузкой по требованию большого количества узлов на одном уровне - PullRequest
1 голос
/ 07 мая 2009

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

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

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

?

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

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

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

Ответы [ 2 ]

2 голосов
/ 07 мая 2009

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

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

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

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

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

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

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

1 голос
/ 07 мая 2009

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

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

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

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

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

...