powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / проставить галочки из второго дерева в первое treeview
2 сообщений из 2, страница 1 из 1
проставить галочки из второго дерева в первое treeview
    #38639439
dima1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

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

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

Код: c#
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.
35.
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 из первого дерева.
Код: c#
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
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]);
                    }
                }
            }
        }
...
Рейтинг: 0 / 0
проставить галочки из второго дерева в первое treeview
    #38640451
dima1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил.

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

Тему можно закрыть.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / проставить галочки из второго дерева в первое treeview
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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