Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Меню неограниченной вложености !!! Задачка 
:(
    Опции темы
voodoo_alik
Дата 31.10.2007, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.4.2007

Репутация: нет
Всего: нет



Добрейший всем вечерок !

Необходимо создать механизм редактирования и отображения иерархического меню неограниченной вложенности. Интерфейс редактирования и отображения должен быть реализован на ASP.NET (C#) в виде web-приложения, а данные должны храниться в MS SQL 2000.

У кого какие соображения имеются по этому поводу ? Интересует, для начала, как построить модель БД, которая будет эту самую неограниченную вложенность хранить...

Да простят меня модеры.... Но задача то, на ASP.NET smile

Это сообщение отредактировал(а) voodoo_alik - 31.10.2007, 22:12
PM MAIL   Вверх
tol05
Дата 31.10.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



В принципе, совершенно не важно: 
- на чем интерфейс должен быть построен
- где должны храниться данные
- что из себя представляют сами данные

важно только одно : алгоритм/модель
Цитата(voodoo_alik @  31.10.2007,  22:10 Найти цитируемый пост)
иерархического меню неограниченной вложенности


мне кажется, что нужно просто заюзать паттерн компоновщик, на базе которого построены все контролы-деревья, технология xml, component-model ну и т.д.  smile  
А начало всему - двунаправленные списки...

Короче: любой item может иметь:
- item-родитель (или null, тогда текущий item - это root)
- коллекцию детей (или null)
- ну и сами данные...

В терминах СУБД это будет означать одну единственную таблицу с полями (здесь даже не нужно хранить ссылки на детей, одним Parent-ом обойтись можно)
--------------------------------------------------
Id   |    ItemName    |    ItemParentId    
--------------------------------------------------
1              root                   null               
2              menu1                  1               
3              menu2                  1               
4              menu11                2               
5              menu12                2               
6              menu21                3               
7              menu22                3                 

Это сообщение отредактировал(а) tol05 - 31.10.2007, 22:46


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
voodoo_alik
Дата 1.11.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.4.2007

Репутация: нет
Всего: нет



Спасибо.

А если в режиме редактирования необходимо реализовать функцию изменения очередности следования подпунктов, находящихся на одной иерархической ветви и принадлежащих одной родительской записи ?
Например:

Пункт 1
Пункт 2
    Пункт 2.1.
    Пункт 2.2.
        Пункт 2.2.1
        Пункт 2.2.2.
    Пункт 2.3.
Пункт 3    

============================

Пункт 1
Пункт 2
    Пункт 2.1.
    Пункт 2.3.
    Пункт 2.2.
        Пункт 2.2.1
        Пункт 2.2.2.
Пункт 3
PM MAIL   Вверх
tol05
Дата 1.11.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Нужно прежде всего создать коллекцию бизнесс-объектов и инициализировать их при считывании строк из БД
Код

public class Item
{
int m_Id;
string m_Name;
int m_ParentId;

public Item(int id, string name, int parentId)
{...}

//Свойства доступа к полям
//Методы
}


и если нужно поменять у двух item-ов родителей
Код

int temp = item2.ParentId;
item2.ParentId = item1.ParentId;
item1.ParentId = temp;



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Servena
Дата 1.11.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



Я думаю тогда можно добавить еще одну колонку, например ItemOrder, которая и будет выполнять эту функцию.
PM MAIL   Вверх
voodoo_alik
Дата 1.11.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.4.2007

Репутация: нет
Всего: нет



Т.е. это можно реализовать и на стороне Сервера БД, с помощью хранимой процедуры например, или прямо в приложение программно ?

А как лучше ? 

Это сообщение отредактировал(а) voodoo_alik - 1.11.2007, 20:26
PM MAIL   Вверх
Servena
Дата 1.11.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



Можно и так и так. Но на стороне приложения будет лучше - можно сделать более гибкий алгоритм, да и тормозить меньше будет.
PM MAIL   Вверх
Magnetic
Дата 1.11.2007, 22:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 11.11.2006

Репутация: 1
Всего: 1



Для меню неограниченной вложенности очень удобная модель базы данных nasted sets - в ней, кроме родительского айди, используются левые и правые индексы. Эта модель достаточно проста и гораздо удобнее при работе с элементами, чем использование одного родительского айди, позволяет обойтись без рекурсии при проходе по дереву элементов. В статье есть готовые запросы для работы с данными, но стоит потратить немного времени на понимание принципа модели для наиболее эффективного ее использования.
--------------------
Dude, where's my car?
PM MAIL   Вверх
voodoo_alik
Дата 1.11.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.4.2007

Репутация: нет
Всего: нет



Да, очень интересно... Огромное спасибо за ссылку...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.