Работа с древом, имеющем дубликаты

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Работа с древом, имеющем дубликаты

Сообщение FireFenix » 21.08.2010 (Сб) 0:00

Есть некоторое количество сущностей с несколько видами связанные ссылками в БД
Нужно построить по ним дерево в TreeView, причём при поступлении сигнала синхронизации - было бы возможно обновить часть веток, а не всё дерево
И было бы возможно получить Id слинкованой ветви

Придумал только:
1) Рекурсивно получаем из БД списки ссылок и по ним - объекты
2) В ходе рекурсии если имеется такой линк, то он отбрасывается
3) Рекурсивно строиться дерево в TreeView, где у каждой ветке в .Tag лежит ссылка
При клике на ветку - возвращается ссылка из .Tag
Но получается, что для обновления веток с одинаковым Id, но разными ссылками - приходится перерисовывать всё дерево...
И т.к. работа с деревом организованна отдельным классом, то выплывает двойная рекурсия, что довольно не быстро

Для ссылок использовал класс
Код: Выделить всё
    Public Class TypedLink
        Public Id As Integer
        Public Id_Parent As Integer
        Public Id_Parent_Type As Integer
        Public Id_Link As Integer
        Public Id_Link_Type As Integer
    End Class


Всё же думаю что это унылая организация данных... Как было бы правильнее организовать данные? И как обновить все дочерние ветвления предков с определённым Id при синхронизации?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Работа с древом, имеющем дубликаты

Сообщение Antonariy » 22.08.2010 (Вс) 13:01

FireFenix писал(а):1) Рекурсивно получаем из БД списки ссылок и по ним - объекты
Жуть. Если используется SQL 2005 или 2008, можно воспользоваться CTE.
FireFenix писал(а):Всё же думаю что это унылая организация данных...
+100500

Как было бы правильнее организовать данные?
Тыц

И как обновить все дочерние ветвления предков с определённым Id при синхронизации?
По ссылке, приведенной в указанном топике, есть запрос, выбирающий ветку по id родителя. Переделать под обновление — пара пустяков.
Лучший способ понять что-то самому — объяснить это другому.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Работа с древом, имеющем дубликаты

Сообщение FireFenix » 25.08.2010 (Ср) 0:53

Antonariy писал(а):
FireFenix писал(а):1) Рекурсивно получаем из БД списки ссылок и по ним - объекты
Жуть. Если используется SQL 2005 или 2008, можно воспользоваться CTE

Благодарю! Не знал что скуль сам может слинковать древо...

Как было бы правильнее организовать данные?

У меня немного другая проблема... Обновить в БД не проблема, а проблема в программном изменении отображения в стандартном контроле TreeView, без повторного запроса со скуля
Т.к. клиент-серверная реализаия, то маршрут БД->сервер->клиент при большом дереве займёт немало времени, чем я просто из памяти перерисую дерево рекурсией
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 25

    TopList