Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349

Treeview в WPF

17.02.2011, 19:51. Показов 5143. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть проблемма с TreeView, а именно с подэлементами.
Пишу приложение на WPF для работы с ActiveDirectory. Тестовое приложение написал на Windows.Forms. Начал переносить и удивился что в TreeView.Items[index] отсутстует Items.
Вот первая подпрограма, которую я исправил:
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
52
53
54
55
56
57
 public void TreeNodeView_Add(System.Windows.Controls.TreeView treeView1, string domain, string login, string password)
        {
            DirectoryEntry entryPC = new DirectoryEntry("LDAP://" + domain, login, password);
            System.Windows.Forms.TreeNode tree = new TreeNode();
            treeView1.Items.Clear();
            int i = 0;
            foreach (System.DirectoryServices.DirectoryEntry child in entryPC.Children)
            {
                string Name_CN = child.Name.Substring(child.Name.LastIndexOf(@"CN=") + 3);
                string Name_OU = child.Name.Substring(child.Name.LastIndexOf(@"OU=") + 3);
 
 
                if (string.Compare(child.Name, "CN=Program Data") != 0 &&
                    string.Compare(child.Name, "CN=defaultMigrationContainer30") != 0 &&
                    string.Compare(child.Name, "CN=Infrastructure") != 0 &&
                    string.Compare(child.Name, "CN=LostAndFound") != 0 &&
                    string.Compare(child.Name, "CN=NTDS Quotas") != 0 &&
                    string.Compare(child.Name, "CN=System") != 0)
                {
 
                    switch (child.Name.Substring(0, 3))
                    {
                        case "CN=":
                            if ((child.SchemaClassName != "volume") &&
                                (child.SchemaClassName != "computer") &&
                                (child.SchemaClassName != "contact") &&
                                (child.SchemaClassName != "inetOrgPerson") &&
                                (child.SchemaClassName != "printQueue") &&
                                (child.SchemaClassName != "user"))
                            {
                                if (child.SchemaClassName == "container")
                                {
                                    treeView1.Items.Add(Name_CN);
                                    i++;
                                    //treeView1.Nodes[0].Nodes.Add("123");
                                    Add_subItemsWinForms(treeView1, i, domain, @"/CN=" + Name_CN + ",DC=sova,DC=van,DC=ru", entryPC);
 
                                }
                            }
                            break;
                        case "OU=":
                            if ((child.SchemaClassName != "volume") &&
                                (child.SchemaClassName != "computer") &&
                                (child.SchemaClassName != "contact") &&
                                (child.SchemaClassName != "inetOrgPerson") &&
                                (child.SchemaClassName != "printQueue") &&
                                (child.SchemaClassName != "user"))
                            {
                                treeView1.Items.Add(Name_OU);
                                i++;
                                Add_subItemsWinForms(treeView1, i, domain, @"/OU=" + Name_OU + ",DC=sova,DC=van,DC=ru", entryPC);
                            }
                            break;
                    }
                }
            }
        }
Но во второй подпрограмме передается index:
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
 public void Add_subItemsWinForms(System.Windows.Controls.TreeView View, int elements, string domain, string name, System.DirectoryServices.DirectoryEntry entry)
        {
            entry.Path += name;
 
            foreach (System.DirectoryServices.DirectoryEntry child in entry.Children)
            {
                string Name_CN = child.Name.Substring(child.Name.LastIndexOf(@"CN=") + 3);
                string Name_OU = child.Name.Substring(child.Name.LastIndexOf(@"OU=") + 3);
 
                if ((child.SchemaClassName != "volume") &&
                    (child.SchemaClassName != "computer") &&
                    (child.SchemaClassName != "contact") &&
                    (child.SchemaClassName != "inetOrgPerson") &&
                    (child.SchemaClassName != "printQueue") &&
                    (child.SchemaClassName != "user") &&
                    (child.SchemaClassName != "foreignSecurityPrincipal") &&
                    (child.SchemaClassName != "group"))
                {
                    switch (child.Name.Substring(0, 3))
                    {
                        case "CN=":
                            
                         //   View.Items[elements].Items.Add(Name_CN);
                           
                            break;
                        case "OU=":
                         //   View.Items[elements - 1].Nodes.Add(Name_OU);
                            break;
                    }
                }
            }
            entry.Path = "LDAP://" + domain;
        }
как ее исправить подскажите?

Добавлено через 3 часа 9 минут
попробовал вот так ((ObservableCollection<System.Windows.Fo rms.TreeView>)View.ItemsSource)[0].Nodes[elements].Nodes.Add(Name_OU);
но не работает(

Добавлено через 1 час 43 минуты
Ну не ужели ни кто не сталкивался с этим?
Как добавлять подэлементы по индексу?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2011, 19:51
Ответы с готовыми решениями:

TreeView WPF
не могу разобраться c treeView, вроде все пишу правильно, а &quot;II level&quot; не добавляется ни разу к каждому элементу &quot;I level&quot;,...

Wpf treeview
Форумчане выручайте есть Две таблички первая родитель вторая дети(тут идет ссылка на родителя и на выше стоящий элемент) public...

работа с TreeView WPF
Добрый вечер! Подскажите как мне правильно удалить обьект из TreeView. Все обьекты в TreeView созданы программно через List. Xaml...

4
 Аватар для Unril
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
18.02.2011, 08:00
Посмотри тут: "подэлемент" Treeview пример работы с деревом, а именно создание списка каталогов. Отложенная загрузка и всё такое.
0
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349
18.02.2011, 16:54  [ТС]
Ну собственно сделал используя List и классы:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
 public class Load
    {
        List<Item> myList = new List<Item>();
        List<SubItem> mmList = new List<SubItem>();
 
        public bool proverAD(System.DirectoryServices.DirectoryEntry child)
        {
            return (ProverAD_(child) &&
                    (child.SchemaClassName != "foreignSecurityPrincipal") &&
                    (child.SchemaClassName != "group"));
        }
 
        public bool ProverAD_(System.DirectoryServices.DirectoryEntry child) 
        {
            return ((child.SchemaClassName != "volume") &&
                    (child.SchemaClassName != "computer") &&
                    (child.SchemaClassName != "contact") &&
                    (child.SchemaClassName != "inetOrgPerson") &&
                    (child.SchemaClassName != "printQueue") &&
                    (child.SchemaClassName != "user"));
        }
 
        public bool Compare(System.DirectoryServices.DirectoryEntry child) 
        {
            return (string.Compare(child.Name, "CN=Program Data") != 0 &&
                    string.Compare(child.Name, "CN=defaultMigrationContainer30") != 0 &&
                    string.Compare(child.Name, "CN=Infrastructure") != 0 &&
                    string.Compare(child.Name, "CN=LostAndFound") != 0 &&
                    string.Compare(child.Name, "CN=NTDS Quotas") != 0 &&
                    string.Compare(child.Name, "CN=System") != 0);
        }
 
        public void TreeNodeView_Add(System.Windows.Controls.TreeView treeView,string domain, string login, string password) 
        {
            DirectoryEntry entryPC = new DirectoryEntry("LDAP://" + domain, login, password);
            int i = 0;
            int ParrentID = 0;
            myList.Clear();
            mmList.Clear();
            foreach (System.DirectoryServices.DirectoryEntry child in entryPC.Children)
            {
                string Name_CN = child.Name.Substring(child.Name.LastIndexOf(@"CN=") + 3);
                string Name_OU = child.Name.Substring(child.Name.LastIndexOf(@"OU=") + 3);
 
                if (Compare(child))
                {
                    switch (child.Name.Substring(0, 3))
                    {
                        case "CN=":
                            if (ProverAD_(child))
                            {
                                if (child.SchemaClassName == "container")
                                {
                                    i++;
                                    myList.Add(new Item(i, Name_CN, ParrentID));
                                }
                            }
                            break;
                        case "OU=":
                            if (ProverAD_(child))
                            {
                                i++;
                                myList.Add(new Item(i, Name_OU, ParrentID));
                                entryPC.Path += @"/OU=" + Name_OU + ",DC=sova,DC=van,DC=ru";
                                foreach (System.DirectoryServices.DirectoryEntry childs in entryPC.Children)
                                {
                                    string NName = childs.Name.Substring(childs.Name.LastIndexOf(@"CN=") + 3);
                                    string NameOU = childs.Name.Substring(childs.Name.LastIndexOf(@"OU=") + 3);
                                    if (proverAD(childs))
                                    {
                                        switch (childs.Name.Substring(0, 3))
                                        {
                                            case "CN=":
                                                ParrentID++;
                                                mmList.Add(new SubItem(ParrentID, NameOU, i));
                                                break;
                                            case "OU=":
                                                ParrentID++;
                                                mmList.Add(new SubItem(ParrentID, NameOU, i));
                                                break;
                                        }
                                    }
                                }
                                entryPC.Path = "LDAP://" + domain;
                            }
                            break;
                    }
                }
            }
            Add(treeView);
        }
 
        public void Add(System.Windows.Controls.TreeView treeView1) 
        {
            treeView1.Items.Clear();
            foreach (Item items in myList)
            {
                TreeViewItem TreeNode = new TreeViewItem();
                TreeNode.Header = items.Name;
                TreeNode.Tag = items;
                foreach (SubItem subItems in mmList)
                {
                    TreeViewItem SubItem = new TreeViewItem();
                    if (items.ID == subItems.ids)
                    {
                        SubItem.Header = subItems.Name;
                        SubItem.Tag = subItems;
                        TreeNode.Items.Add(SubItem);
                    }
                }
                treeView1.Items.Add(TreeNode);
            }
        }
    }
 
    class Item 
    {
        internal string Name { private set; get; }
 
        internal int ID { private set; get; }
 
        internal int ParentID { private set; get; }
 
        internal Item(int id, string name, int parrentID) 
        {
            Name = name;
            ID = id;
            ParentID = parrentID;
        }
    }
    
    class SubItem 
    {
        internal string Name { private set; get; }
 
        internal int Id { private set; get; }
 
        internal int ids { private set; get; }
 
        internal SubItem(int id, string name, int IDS) 
        {
            Name = name;
            Id = id;
            ids = IDS;
        }
    }
Добавлено через 2 минуты
А подскажите как обратится к элементу TreeView по щелчку мыши и передать его в строковую переменную?
0
 Аватар для Enma Ai
20 / 18 / 4
Регистрация: 04.12.2009
Сообщений: 82
21.02.2011, 14:47
Цитата Сообщение от Vangok Посмотреть сообщение
...
А подскажите как обратится к элементу TreeView по щелчку мыши и передать его в строковую переменную?
Может записывать нужную строку в каждый TreeView в свойство "Tag" ?
C#
1
2
3
System.Windows.Controls.TreeView treeView = new System.Windows.Controls.TreeView();
treeView.Tag = "text text";
string str = treeView.Tag.ToString();
или так:
C#
1
2
3
4
5
6
7
8
9
10
11
private void Window_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
System.Windows.Controls.TreeView treeView = new System.Windows.Controls.TreeView();
treeView.Tag = "text text";
treeView.MouseLeftButtonUp += new MouseButtonEventHandler(treeView_MouseLeftButtonUp);
}
...
void treeView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
string str = (sender as System.Windows.Controls.TreeView).Tag.ToString();
}
0
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349
24.02.2011, 18:02  [ТС]
Цитата Сообщение от Enma Ai Посмотреть сообщение
Может записывать нужную строку в каждый TreeView в свойство "Tag" ?
C#
1
2
3
System.Windows.Controls.TreeView treeView = new System.Windows.Controls.TreeView();
treeView.Tag = "text text";
string str = treeView.Tag.ToString();
или так:
C#
1
2
3
4
5
6
7
8
9
10
11
private void Window_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
System.Windows.Controls.TreeView treeView = new System.Windows.Controls.TreeView();
treeView.Tag = "text text";
treeView.MouseLeftButtonUp += new MouseButtonEventHandler(treeView_MouseLeftButtonUp);
}
...
void treeView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
string str = (sender as System.Windows.Controls.TreeView).Tag.ToString();
}
Не там событие есть на выбор элемента.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2011, 18:02
Помогаю со студенческими работами здесь

Treeview в WPF и MVVM
Доброе утро! Подскажите плз, статьи, примеры проектов и что нибудь еще для повышения осознанности при работе с таким элементов как...

[WPF] Иерархия treeView
Добрый вечер. Ребята помогите из базы Построить иерархию treeView //Шаблон public class DBFTreeView { ...

Подэлементы TreeView WPF
Здравствуйте. Подскажите, как сделать такую вещь: имеется список TreeView +--Directory --ss --st Как по нажатию...

treeview + listview в WPF
Здравствуйте. Начал осваивать WPF, предварительно написав весь функционал программы в консольном приложении. Сразу столкнулся с...

WPF treeview добавление узлов
Имеется treeview. Как программно добавлять узлы? Мне необходимо добавить родительский узел + дочерний + дочерний к предыдущему уровню. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru