Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2014, 09:52   #1
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию проставить галочки из второго дерева в первое treeview

Добрый день.

Не получается проставить галочки из второго дерева в первое.

В поисковиках искал и такого вообще нету. Если знаете, то дайте пожалуйста ссылку.

вот первая попытка. Действует только если деревья полностью одинаковые по структуре, но мне нужно обработать случай когда они почти одинаковы. т.е. если в первое добавили несколько новых узлов, то что бы всё равно по name и level галочка проставлялась.

Код:
private void button2_Click_1(object sender, EventArgs e)
        {   // проставление галок в первом дереве таких же как и во втором
 
            // берем первый элемент дерева на которое хотим проставить галки
 
            // проставим галки по корням берем галки из правого и ставим в левое
            for (int i = 0; i < treeView3.Nodes.Count; i++)
            {
                if (treeView3.Nodes[i].Checked == true)
                {
                    treeView2.Nodes[i].Checked = true;
                }
            }
 
            // пройдёмся по дочерним
            for (int i = 0; i < treeView3.Nodes.Count; i++)
            {
                ObxodDereva(treeView3.Nodes[i], treeView2.Nodes[i]);
            }
        }
 
        private void ObxodDereva(TreeNode a, TreeNode b)
        {
            if (a.Nodes != null) //дочерние элементы есть
            {
                for (int i = 0; i < a.Nodes.Count; i++)
                {
                    if (a.Nodes[i].Checked)
                    {
                        b.Nodes[i].Checked = true;
                    }
                    ObxodDereva(a.Nodes[i], b.Nodes[i]);
                }
            }
        }
Вот вторая попытка. уже лучше получилось, но галочка из test2 второго дерева не попадает в test2 из первого дерева.

Код:
private void button2_Click_1(object sender, EventArgs e)
        {   // проставление галок в первом дереве таких же как и во втором
 
 
            // проставить галки из tv3 в tv2 по корням
            for (int i = 0; i < tv3.Nodes.Count; i++)
            {
                for (int j = 0; j < tv2.Nodes.Count; j++)
                {
                    // если совпадает имя и уровень вложения
                    if (tv2.Nodes[j].Name == tv3.Nodes[i].Name && tv2.Nodes[j].Level == tv3.Nodes[i].Level)
                    {
                        if (tv3.Nodes[i].Checked == true)
                            tv2.Nodes[j].Checked = true;
                    }
                }
            }
 
            // пройдёмся по дочерним
            for (int i = 0; i < tv3.Nodes.Count; i++)
            {
                ObxodDereva(tv2.Nodes[i], tv3.Nodes[i]);
            }
        }
 
        /// <summary>
        /// обход по внешнему
        /// </summary>
        /// <param name="a">дерево в которое проставляем галки</param>
        /// <param name="b">дерево из которых берем галки</param>
        private void ObxodDereva(TreeNode a, TreeNode b)
        {
            if (b.Nodes != null) //дочерние элементы есть
            {
                // проход по внешнему дереву
                for (int i = 0; i < b.Nodes.Count; i++)
                {
                    // проход по внутреннему дереву
                    for (int j = 0; j < a.Nodes.Count; j++)
                    {
                        // если совпадает имя и уровень вложения
                        if (b.Nodes[i].Name == a.Nodes[j].Name && b.Nodes[i].Level == a.Nodes[j].Level)
                        {
                            if (b.Nodes[i].Checked == true)
                                a.Nodes[j].Checked = true;
                        }
                        ObxodDereva(a.Nodes[j], b.Nodes[i]);
                    }
                }
            }
        }
Изображения
Тип файла: jpg 1.JPG (20.5 Кб, 62 просмотров)
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.

Последний раз редактировалось dima1257; 13.05.2014 в 09:56.
dima1257 вне форума Ответить с цитированием
Старый 13.05.2014, 10:26   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

в первом сериализуешь во втором десериализуешь, всё
eval вне форума Ответить с цитированием
Старый 13.05.2014, 10:52   #3
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
в первом сериализуешь во втором десериализуешь, всё
Не совсем понятно причем тут сериализация и десереализация?
Ведь это для того что бы структуру дерева сохранять/загружать в поток битов.
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.

Последний раз редактировалось dima1257; 13.05.2014 в 10:55.
dima1257 вне форума Ответить с цитированием
Старый 13.05.2014, 11:02   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а у вас разве не то?
eval вне форума Ответить с цитированием
Старый 13.05.2014, 11:12   #5
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию

нет, мне нужно проставить в первом дереве все галочки которые есть во втором.
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Старый 13.05.2014, 12:46   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

если деревья не синхронизированы то в общем случае никак не сделать
eval вне форума Ответить с цитированием
Старый 13.05.2014, 13:37   #7
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию

Есть конечно идея. Взять первый элемент первого дерева, пробежать с ним по второму дереву и если совпадут name и level и parent, то уже проверять checked.

Собственно что я и хотел выразить во второй попытке.
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Старый 13.05.2014, 14:37   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

если ноды одинаковые, то вся эта чехарда не нужна, если разные то надо вводить доп условия, иначе никак
если вы оговариваете что узел и уровень всегда должны совпадать то при чем тут тогда -
Цитата:
но галочка из test2 второго дерева не попадает в test2 из первого дерева.
?

вы сами разберитесь что у вас к чему
eval вне форума Ответить с цитированием
Старый 14.05.2014, 01:41   #9
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию

Решил.

Я создал динамическую DataTable с полями nodeName, nodeText, nodeLevel, nodeParent, checked.
Прохожу по дереву с галочками и записываю информацию о них в строки DataTable, а потом прохожу по дереву в которое мне надо проставить галочки и проверяю соответственно если 4 этих параметра совпадают, то ставлю checked true или false соответственно.
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приведение "дерева" Treeview к виду html списка. Xme1ez Общие вопросы Delphi 2 03.04.2014 17:17
Отметить все галочки scroyler БД в Delphi 0 27.04.2012 20:09
Программное отмечивание галочки scroyler БД в Delphi 1 12.02.2012 19:33
TreeView, ImageList и БД(трабл з заполнением дерева) atihiy2010 БД в Delphi 11 07.04.2011 15:52
Сортировка узлов дерева treeview gool Общие вопросы Delphi 1 06.11.2009 09:20