powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Управление узлами в TreeView
8 сообщений из 8, страница 1 из 1
Управление узлами в TreeView
    #37537073
MSSQLAndDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо сделать управление узлами в TreeView
1) Переместить узел вверх
2) Переместить узел вниз
3) Переместить узел в список родительских узлов
4) Переместить узел в список узлов вышестоящего узла

Нашел для WinForms
http://selo-blog.blogspot.com/2010/01/treeview-winforms.html
Нужно для asp
Может завалялся у кого код?
Заранее спасибо.
...
Рейтинг: 0 / 0
Управление узлами в TreeView
    #37537993
MSSQLAndDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите решить более простую задачу.
Имеется дерево TreeViewTmp из трех коренных элементов


-B
-C

Пользователь выбирает узел B
Нажимает кнопку "Вниз"
Какой обработчик на кнопке нужно сделать что бы получить дерево на TreeViewTmp



-B

???
...
Рейтинг: 0 / 0
Управление узлами в TreeView
    #37540054
MSSQLAndDotNet,
Конечный код зависит от того, на основе каких данных вы строите дерево: выборка из БД, XML и т.п. Алгоритм у всех одинаковый:
Элементы дерева должны быть отсортированы по чему-нибудь. В идеале должен быть индекс сортировки. Когда пользователь нажимает вниз, то нужно найти элемент с наименьшим индексом, который больше выбранного, и поменять индексы у выбранного и найденного элемента местами. Затем очистить и перестроить дерево.
Все это повесить на клик кнопки "Вниз". Аналогично делается и перемещение вверх.
Изменение родителя - просто меняешь родительскую ИД на другую (если нужно ноду кинуть в корень, то на ИД корня) и все.
...
Рейтинг: 0 / 0
Управление узлами в TreeView
    #37540575
MSSQLAndDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гришков МаксимMSSQLAndDotNet,
Конечный код зависит от того, на основе каких данных вы строите дерево: выборка из БД, XML и т.п. Алгоритм у всех одинаковый:
Элементы дерева должны быть отсортированы по чему-нибудь. В идеале должен быть индекс сортировки. Когда пользователь нажимает вниз, то нужно найти элемент с наименьшим индексом, который больше выбранного, и поменять индексы у выбранного и найденного элемента местами. Затем очистить и перестроить дерево.
Все это повесить на клик кнопки "Вниз". Аналогично делается и перемещение вверх.
Изменение родителя - просто меняешь родительскую ИД на другую (если нужно ноду кинуть в корень, то на ИД корня) и все.
Спасибо за совет! Дерево формируется так
http://www.sql.ru/forum/actualthread.aspx?tid=895213
хочу сделать так, что бы пользователь изменил дерево как ему хочется, затем нажал кнопку "сохранить" и в БД сохранилось новое дерево.
Индексы храню в поле nod.value
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
        /// <summary>
        /// вспомогательная процедура для FillIndexTreeView
        /// заполняет уникальными индексами дочерние узлы нода nod
        /// </summary>
        /// <param name="nod"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public int FillIndexChildNodes(TreeNode nod, int index)
        {
            int i = index;
            foreach (TreeNode nd in nod.ChildNodes)
                {
                    nd.Value = i.ToString();
                    i++;
                    index = FillIndexChildNodes(nd, i);
                }
            return i;
        }

        /// <summary>
        /// заполняем узлы tv индексами(поле value) , уникальными для каждого узла
        /// обход дерева осуществляется сверху вниз, перебираются все элементы, индес инкрементируется
        /// </summary>
        /// <param name="tv"></param>
        public void FillIndexTreeView(TreeView tv)
        {
            int index=0;
            foreach (TreeNode nod in tv.Nodes)
            {
                nod.Value = index.ToString();
                index++;
                index=FillIndexChildNodes(nod,index);
            }
        }
Сейчас пишу процедуру SwapNode. Дальше подводных камней не вижу.
...
Рейтинг: 0 / 0
Управление узлами в TreeView
    #37544529
MSSQLAndDotNet,

По какому пою вы планируете выполнять сортировку внутри ветки?
...
Рейтинг: 0 / 0
Управление узлами в TreeView
    #37545161
MSSQLAndDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гришков МаксимMSSQLAndDotNet,

По какому пою вы планируете выполнять сортировку внутри ветки?
Сортировки внутри ветки не будет, ибо пользователь изменяя расположение узлов сам будет определять их порядок.
Изначально дерево формируется как показано в предыдущем посте(по ссылке, там есть ошибки, но идея ясна), изначальная сортировка по полю itemOrder.

На данный момент я сделал перемещение узла дерева вверх и вниз.
Идея такая:
обходим все узлы дерева и индексируем их, индекс присваиваем полю node.value.
Выделяем узел, нажимаем кнопку "вверх", далее обработчик такой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
      /// <summary>
        /// Up!
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ButtonUp_Click(object sender, EventArgs e)
        {
            try
            {
                TreeNode SelectedNode = TreeViewModulePage.SelectedNode;// получаем выделенный узел
                if (SelectedNode != null)
                {
                    TreeNode tn = new TreeNode();
                    tn = FindNode(TreeViewModulePage, int.Parse(SelectedNode.Value) - 1);// Ищем более верхний узел по индексу
                    if (tn != null)
                    {
                        //TreeViewModulePage.SelectedNode = tn;
                        tn.Select();// выделяем верхний узел
                        SwapNode(SelectedNode, tn);// обмениваем узлы между собой
                        FillIndexTreeView(TreeViewModulePage);// заново индексируем дерево ибо порядок индексов изменился                       
                    }
                }
            }
            catch { }
        }
Проблема в том, что теперь я не знаю как реализовать
3) Переместить узел в список родительских узлов
И вообще эта идея мне не очень нравится, одни заморочки, а не алгоритм))

Идея2:
В node.value хранить з-е поля itemOrder(путь к узлу), и соответственно алгоритм управления узлами реализовывать используя это значение. Вот эта идея мне нравится! Осталось только реализовать ентот самый алгоритм)).

PS Завтра выходные, времени много, вот как раз и займусь этим.
...
Рейтинг: 0 / 0
Управление узлами в TreeView
    #37547246
MSSQLAndDotNetСортировки внутри ветки не будет, ибо пользователь изменяя расположение узлов сам будет определять их порядок.
...
Рейтинг: 0 / 0
Управление узлами в TreeView
    #37547255
Гришков МаксимСортировки внутри ветки не будет, ибо пользователь изменяя расположение узлов сам будет определять их порядок.
Промахнулся кнопкой.
Так вот, как я сейчас вижу, что у вас SelectedNode.Value - это и есть ключ, определяющий положение ветки в дереве. Если SelectedNode.Value - ID записи (PK таблицы) то это совсем не правильно. Догадайтесь почему...
Если вы перебросите ветку выше или ниже, то изменится ИД => все записи из других таблиц, ссылающиеся на текущую, перестанут ссылаться на нее. Т.е. вам при этом придется еще и во всех дочерних таблицах обновлять внешние ключи... А это уже как минимум опасно...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Управление узлами в TreeView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]