Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Temoxa
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
Завершенные тесты: 1
1

Сформировать дерево TreeView по данным из БД

28.05.2012, 05:40. Просмотров 2170. Ответов 2
Метки нет (Все метки)

Привет ребята! Вот смотрите, есть стандартная таблица дерева)

TreeID,
LevelID,
ParentID,
Name
Например, данные такие

1 1 NULL Телевизоры
2 2 1 Samsung
3 2 1 Sony

И как теперь заполнить TreeView из такой таблицы?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2012, 05:40
Ответы с готовыми решениями:

Дерево TreeView
Мне необходимо, что бы в дереве был определённая иконка и я реализовал это не...

Дерево treeview, запутался окончательно...
1. Ну так вот мне нужно что бы при нажатии правой клавишей по Nodes выводилась...

TreeView - дерево с разными типами
Привет форумчане! Прошу помощи в работе с компонентом TreeView в WPF. Задача...

Заполнить из базы данных дерево значений (TreeView)
Доброго дня, хочу заполнить из базы данных дерево значений (структура дерева...

Сформировать XML-документ по данным TreeView
Доброго времени суток, у меня такой вопрос, я читаю и вывожу свой XML...

2
MATiAiX
3 / 3 / 1
Регистрация: 31.05.2012
Сообщений: 20
07.06.2012, 12:23 2
Мне думается тут твою таблицу нужно разделить на таблицу например "номенклатура" и "ТВ". А по заполнению посмотреть в сторону datatemplate.
0
Unril
790 / 681 / 109
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
10.06.2012, 00:15 3
Лучший ответ Сообщение было отмечено Temoxa как решение

Решение

На основе исходных данных формируешь древовидную структуру из класса Node, имеющего поля Name и список с потомками. Создаешь HierarchicalDataTemplate с необходимыми параметрами отображения. После этого создаёшь элемент TreeView и привязываешь корень дерева к его свойстве ItemsSource. Готово.

Добавлено через 1 час 26 минут
Пример:
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
namespace WpfApplicationTest {
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows;
 
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
 
            var records = new List<Record>
                {
                    new Record
                        {
                            Name = "Телевизоры",
                            TreeId = 1,
                            ParentId = 0
                        },
                    new Record
                        {
                            Name = "Samsung",
                            TreeId = 2,
                            ParentId = 1
                        },
                    new Record
                        {
                            Name = "Sony",
                            TreeId = 3,
                            ParentId = 1
                        },
                    new Record
                        {
                            Name = "Sony1",
                            TreeId = 4,
                            ParentId = 3
                        },
                    new Record
                        {
                            Name = "Sony2",
                            TreeId = 5,
                            ParentId = 3
                        },
                    new Record
                        {
                            Name = "Samsung1",
                            TreeId = 6,
                            ParentId = 2
                        }
                };
 
            var root = CreateTree(records);
 
            tree.ItemsSource = new[] { root };
        }
 
        private static Node CreateTree(List<Record> records) {
            Record rootRecord = records.First(r => r.ParentId == 0);
            var root = new Node(rootRecord.Name, rootRecord.TreeId);
            foreach (Record record in records.Where(r => r.ParentId != 0)) {
                root.Add(record);
            }
            return root;
        }
    }
 
    public class Record {
        public int TreeId { get; set; }
 
        public int ParentId { get; set; }
 
        public string Name { get; set; }
    }
 
    public class Node {
        public Node(string name, int id) {
            Id = id;
            Name = name;
            Children = new List<Node>();
        }
 
        public string Name { get; set; }
 
        public List<Node> Children { get; set; }
 
        public int Id { get; set; }
 
        public override string ToString() {
            return string.Format("Name: {0}", Name);
        }
 
        public void Add(Record record) {
            Traverse().First(node => node.Id == record.ParentId).Children.Add(new Node(record.Name, record.TreeId));
        }
 
        private IEnumerable<Node> Traverse() {
            yield return this;
            foreach (Node child in Children.SelectMany(node => node.Traverse())) {
                yield return child;
            }
        }
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<Window x:Class="WpfApplicationTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="350" Width="525" Background="#FFF8F8F8"
        Title="MainWindow" xmlns:src="clr-namespace:WpfApplicationTest">
  <Grid>
    <TreeView x:Name="tree">
      <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type src:Node}" ItemsSource="{Binding Path=Children}">
          <TextBlock Text="{Binding Path=Name}" />
        </HierarchicalDataTemplate>
      </TreeView.Resources>
    </TreeView>
  </Grid>
</Window>
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 00:15

Сформировать дерево TreeView данными из таблицы
Люди помогите очень нужно Есть таблица в БД следующего вида: id организация...

Сформировать дерево Т и определить число вхождений параметра Е в дерево Т - Блок схема
Сформировать дерево Т и определить число вхождений параметра Е в дерево Т. Вот...

Не верно отображается TreeView, сформированный по данным из БД
Здраствуйте, подскажите пожайлуста. есть база Acess состоящая всего из двух...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru